Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [MySQL/PHP]Problem z przestawieniem tabeli(pivot)
Forum PHP.pl > Forum > Przedszkole
adamrd
Witam

mam tabelkę o takiej strukturze

ID|NazwaTowaru|NazwaZdjecia|WielkośćZdjecia|NrZdjęciaTowaru|TypPliku
1 | t1 | zd1 | 1 | 1 | jpg
2 | t1 | zd2 | 2 | 1 | piktogram
3 | t1 | zd3 | 1 | 2 | jpg
4 | t2 | zd4 | 3 | 1 | bmp
5 | t3 | zd5 | 2 | 1 | piktogram
6 | t3 | zd6 | 1 | 2 | jpg
7 | t3 | zd7 | 3 | 2 | bmp
....
Pierwotna tabela posiada każde zdjęcie dopisane do kolejnego rekordu, NazwaTowaru ma różne ilości zdjeć w róznych wielkościach np.t1-3zdjęcia, t2-1zdjecie .

czy da się za pomocą samego zapytania wyciagnąć dane z tej tabeli do takiego formatu by przy określonym warunku wielkości zdjecia np. WielkośćZdjecia =1 by tabelka wyglądała tak

NazwaTowaru|NrZdjęciaTowaru=1|NrZdjęciaTowaru=2|NrZdjęciaTowaru=3 itd....
t1 | zd1 | zd3 |
t3 | | zd6 |

docelowo NazwaTowaru ma byc unikatowa a zdjecia dopisywane do kolejnych kolumn
nazwy zdjęć moga byc dopisywane do kolejnych kolumn wg. NrZdjęciaTowaru jak dla t3 lub w pierwsza wolną kolumne jak dla t1 to nie ma dla mnie znaczenia.

Pytanie jest takie czy wystarczy samo zapytanie do bazy czy jednak potrzeba będzie to w php napisac?
nevt
a dlaczego nie wystarcza ci rezultat w stylu:

t1 | zd1 |
t1 | zd3 |
t3 | zd6 |

??
adamrd
Niestety nie wystarczy ponieważ zewnetrzny program obslugujący bazę pozwala na dodanie zdjęć jedynie w pliku gdzie indeks towaru jest unikalny a zdjecia są w 1 linijce rozdzielane przecinkiem. program jest w php kodowany ionCube więc nie da się nic tam zmienić.
Chyba najlepszym rozwiązaniem będzie zrobienie takigo pivota i zapisaniem tabelki później jako csv. tabela ze zdjęciami pochodzi z innej bazy danych i ma ponad 34000 rekordów więc ręczne przypisywanie zdjęć do towarów jest ostatecznością. towarów jest około 4500 i maja od 1 do 13zdjęć.

Problem rozwiązany za pomoca php po pobraniu danych z bazy oto fragment kodu którego wynik można prosto skopiowac do notatnika i przerobic na csv.

  1. <?php
  2. $results = mysql_query($query) or die(mysql_error());
  3. $tmp = null;
  4. while ($row = mysql_fetch_assoc($results)) {
  5. extract($row);
  6. if($tmp != $NazwaTowaru)
  7. {
  8. echo "
  9. ";
  10. echo $NazwaTowaru;
  11. echo ";";
  12. }
  13. echo $NazwaZdjecia;
  14. echo ";";
  15. $tmp = $NazwaTowaru;
  16.  
  17. }
  18. ?>


temat do zamknięcia.
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.