Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: MySQL - dane z dwóch tabel zwracane w jednym wierszu?
Forum PHP.pl > Forum > Bazy danych > MySQL
pozmu
Witam, mam problem. Oto on: - mam dwie tabelki podobne do tych poniżej:
[php:1:3c6b7fddb0]
table p
---------------------
id name
1 xxxx
2 zzzzz


table i
---------------------
imgid pid photo(blob)
1 1
2 2
3 1
4 1
5 1
6 2
[/php:1:3c6b7fddb0]
Niby fajnie. Ale teraz chce wyciągnąc listę produktów (tabela p) i przypisanych do nich zdjęć (tabela i - relacje opisuje pid - czyli odwołanie do id produktu). Kombinowałem wiele, ale jedyne, co mi się udaje uzyskać to coś w stylu:
[php:1:3c6b7fddb0]
id name imgid
1 xxxx 1
1 xxxx 3
1 xxxx 4
1 xxxx 5
2 zzzzz 2
2 zzzzz 6
[/php:1:3c6b7fddb0]

Wszystko jest, ale produkty się powtarzają tyle razy, ile jest do nich fotek... Zamiast tego chciałbym uzyskać coś w stylu:

[php:1:3c6b7fddb0]
id name imgid[1] imgid[2] imgid[3] imgid[4]
1 xxxx 1 3 4 5
2 zzzzz 2 6
[/php:1:3c6b7fddb0]
Czy to możliwe w Mysql 3.x questionmark.gif? Z góry wielkie dzięki za pomoc.
spenalzo
A co za problem wrzucić to do tablicy w php, której kluczem bedą ID produktów, a wartością tablica z ID fotek?
pozmu
Cytat
A co za problem wrzucić to do tablicy w php, której kluczem bedą ID produktów, a wartością tablica z ID fotek?


No nie problem, ale to:
a) nieelegancko
cool.gif przy większej ilości danych w tabeli p byłoby to bardzo nieefektywne (wyciąganie wszystkiego x razy)

Na IRC szanowny Pan Przewodniczący napisał, że kolega Spenalzo jest alfą i omegą jeśli chodzi o SQL (ja po przejrzeniu tego działu forum też się do tego przychylam).... więc pytanie: da się to zrobić w mysqlu czy nie? Bo jak nie to będę spokojnie kombinował z php właśnie albo po prostu dam dwa zapytania.

Dzięki smile.gif
I wesołych świąt dla wszystkich z forum i ekipy php.pl.
spenalzo
Ale dlaczego wiele razy? Możesz jednym zapytaniem wyciągnąć:
[sql:1:3c15ad6c77]select p.id AS pid, f.id AS fid from produkty p left join foto f on (p.id=f.pid)[/sql:1:3c15ad6c77]
a w php
[php:1:3c15ad6c77]<?php
$q=mysql_query("...");
while($t=mysql_fetch_array($q))
{
$prod[$t["pid"]][]=$t["fid"];
}
print_r($prod);
?>[/php:1:3c15ad6c77]
nie sprawdzałem czy działa, ale powinno...
pozmu
Cytat
Ale dlaczego wiele razy? Możesz jednym zapytaniem wyciągnąć:


Jasne, jasne, ale takie zapytanie nie jest najlepszym rozwiązaniem - fakt, w tym przypadku jest w porządku i można go od biedy, czyli w przypadku, gdy inne nie istnieje, użyć i wszystko będzie działać jak należy. Tylko czy naprawdę nie da się tego zrobić inaczej, na poziomie bazy?questionmark.gif - przy większej liczbie rekordów z tabeli p, czy ich dużym rozmiarze to nie będzie zbyt efektywne.

Cytat
nie sprawdzałem czy działa, ale powinno...

Działa bezproblemowo.
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.