Problem z zapytaniem, a konkretniej z wynikiem

0

Witam wszystkich.

Potrzebowałem pobrać w jednym zapytaniu dane z dwóch tabel, więc zrobiłem to UNION i tutaj pojawił się problem, ponieważ wrzucając do bazy zapytanie:

$zapytkon = mysql_query("SELECT id, oferta, kolor FROM kolory WHERE oferta = '$id' 
		UNION ALL SELECT id, oferta, zdjecie FROM zdjecia WHERE oferta = '$id'");

gdzie za $id przyjąłem wartość 3 to otrzymałem coś takiego:

id 	oferta 	kolor
1 	3 	10
2 	3 	11
1 	3 	berta.png
2 	3 	berta1.png

problem w tym, że berta.png i berta1.png nie są kolorem tak jak wskazuje tutaj tabela tylko są zdjęciem, więc przy odczytywaniu kodem:

while($wierszusiek = mysql_fetch_array($zapytkon))
		{
			$zdjecie = $wierszusiek['zdjecie'];
			echo '<li><a href="zdjecia/'.$zdjecie.'" title="'.$wierszusiek['id'].'"><img src="kolory/'.$wierszusiek['kolor'].'.png" alt="'.$wierszusiek['kolor'].'" border="0" /></a></li>';
		}

pod zmienną zdjecie otrzymuje Notice, a pod $wierszusiek['kolor'] otrzymuje te wszystkie dane, a ja tego tak nie chcę.
W $wierszusiek['zdjecie'] chciałbym rekordy zdjęć, a w $wierszusiek['kolor'] same kolory, czyli moim mniemaniem w bazie po jakimś zapytaniu chciałbym otrzymać taki wynik:

id 	oferta 	kolor
1 	3 	10
2 	3 	11
id 	oferta 	zdjecie
1 	3 	berta.png
2 	3 	berta1.png

Tylko problem jest w tym, że nie wiem jakim JEDNYM zapytaniem takie coś otrzymać.

Proszę o pomoc.
Z góry dziękuje :)

0
 JOIN

albo zapytanie o pola dwóch tabel z odpowiednim warunkiem

0

Czytałem w google o JOIN ale nie mogę się połapać jakby to zapytanie miało wyglądać. Pomoże ktoś?

0
 SELECT k.id, k.oferta, k.kolor, z.oferta, z.zdjecie FROM kolory k, zdjecia z WHERE z.id=k.id AND z.oferta = '$id' 
0

Dzięki wielkie :)
Dokładnie o to chodziło. Ja sam coś kombinowałem ale wyświetlał mi z powtórzeniami, a to działa tak jak chciałem :)

0

To powyżej to jakiś pseudo JOIN. działa, lecz słyszałem, że ten iloczyn kartezjański może wykończyć bazę danych. Jak miałby wyglądać taki JOIN?

0

to powyżej, to nie jest JOIN tylko SELECT z dwóch tabel, a przykład joina masz tu:

SELECT * FROM Table1 INNER JOIN Table2 ON Table1.columnA = Table2.columnB;  
0

Prawie działa, jeżeli mam jeden distinct to jest ok, ale ja chciałbym, żeby dwie kolumny się nie powtarzały to sypie błędem

0
nansss napisał(a)

Prawie działa, jeżeli mam jeden distinct to jest ok, ale ja chciałbym, żeby dwie kolumny się nie powtarzały to sypie błędem

  1. co tzn. prawie?
  2. a ile distinctów chciałbyś mieć i gdzie?
  3. co tzn. kolumny się nie powtarzały?
0

Rozwiązanie:

$zapytkon = mysql_query("SELECT kolory.kolor, kolory.id, zdjecia.id, kolory.oferta, zdjecia.oferta, zdjecia.domyslne, zdjecia.zdjecie
		FROM kolory
		INNER JOIN zdjecia ON kolory.id = zdjecia.id
		WHERE kolory.oferta = '$id' AND zdjecia.oferta = '$id'");

1 użytkowników online, w tym zalogowanych: 0, gości: 1