obtener mysqli_num_rows mysqli_fetch_assoc mysqli_fetch_array mysql_fetch_array ejemplos datos array mysql join left-join

mysqli_num_rows - IZQUIERDA ÚNETE solo en la primera fila



mysqli_fetch_assoc (4)

He usado otra cosa (creo que es mejor ...) y quiero compartirla:

Creé una VISTA que tiene una cláusula de "grupo"

CREATE VIEW vCountries AS SELECT * PROVINCES GROUP BY country_code SELECT * FROM client INNER JOIN vCountries on client_province = province_id

Quiero decir todavía, que creo que tenemos que hacer esta solución PORQUE HICIMOS ALGO EQUIVOCADO EN EL ANÁLISIS ... al menos en mi caso ... pero a veces es más barato hacer esto que rediseñar todo ...

¡Espero que ayude!

Leí muchos temas sobre cómo obtener solo la primera fila de una combinación de la izquierda, pero, por alguna razón, esto no funciona para mí.

Aquí está mi estructura (simplificada por supuesto)

Feeds

id | title | content ---------------------- 1 | Feed 1 | ...

Artistas

artist_id | artist_name ----------------------- 1 | Artist 1 2 | Artist 2

feeds_artists

rel_id | artist_id | feed_id ---------------------------- 1 | 1 | 1 2 | 2 | 1 ...

Ahora quiero obtener los artículos y unirme solo al primer artista y pensé en algo como esto:

SELECT * FROM feeds LEFT JOIN feeds_artists ON wp_feeds.id = ( SELECT feeds_artists.feed_id FROM feeds_artists WHERE feeds_artists.feed_id = feeds.id LIMIT 1 ) WHERE feeds.id = ''13815''

solo para obtener solo la primera fila de los feeds_artists, pero esto ya no funciona.

No puedo usar TOP debido a mi base de datos y no puedo agrupar los resultados por feeds_artists.artist_id ya que necesito ordenarlos por fecha (obtuve resultados al agruparlos de esta manera, pero los resultados no son los más recientes)

Intentó algo con APLICACIÓN EXTERIOR también, sin éxito también. Para ser sincero, no puedo imaginar qué está sucediendo en esas filas, probablemente la razón más grande por la que no puedo hacer que esto funcione.

SOLUCIÓN:

SELECT * FROM feeds f LEFT JOIN artists a ON a.artist_id = ( SELECT artist_id FROM feeds_artists fa WHERE fa.feed_id = f.id LIMIT 1 ) WHERE f.id = ''13815''


Si puede suponer que las ID de los artistas se incrementan con el tiempo, entonces MIN(artist_id) será el más antiguo.

Intente algo como esto (no probado ...)

SELECT * FROM feeds f LEFT JOIN artists a ON a.artist_id = ( SELECT MIN(fa.artist_id) a_id FROM feeds_artists fa WHERE fa.feed_id = f.feed_id ) a


Versión sin subselección que se unirá solo al primer autor:

SELECT f.title, f.content, a.artist_name artist_name, min(a.id) as m FROM feeds f LEFT JOIN feeds_artists fa ON fa.feed_id = f.id LEFT JOIN artists a ON fa.artist_id = a.artist_id GROUP BY f.id HAVING a.id = m;


Versión sin subselección:

SELECT f.title, f.content, MIN(a.artist_name) artist_name FROM feeds f LEFT JOIN feeds_artists fa ON fa.feed_id = f.id LEFT JOIN artists a ON fa.artist_id = a.artist_id GROUP BY f.id