• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Pytanie PHP/SQL/MYSQL

VPS Starter Arubacloud
0 głosów
255 wizyt
pytanie zadane 22 lutego 2019 w SQL, bazy danych przez zerakot Obywatel (1,870 p.)
Witam,

Mam kod(taki niby sklep) i w nim chcę zrobić coś takiego jak na np. Allegro, że po wyszukaniu przedmiotu wszystkie produkty są wyświetlane tak, że każdy jest w innym divie.

 

Jak sformułować zapytanie sql, aby wybierało tylko ten produkt, który nie jest w innym divie?

1 odpowiedź

+1 głos
odpowiedź 22 lutego 2019 przez Arkadiusz Waluk Ekspert (287,550 p.)

W ogóle źle do tego podchodzisz. Baza danych nie rozumie czy coś jest w divie, nie wie czy coś jest wyświetlane gdziekolwiek. Nawet sam PHP nie wie czy coś jest w divie, on po prostu wyświetla tekst, który może być kodem HTML, który sparsuje sobie przeglądarka. Baza po prostu trzyma dane, możesz coś tam dodać, może Ci je zwrócić... Sam musisz pomyśleć jak to rozwiązać. Tak najprościej wydaje się, że trzymać id już wyświetlonych produktów i przy zapytaniu do bazy zaznaczyć, aby id było inne od nich. Ale pewnie można to zoptymalizować i próbować wybrać wszystko jednym zapytaniem. Zależy jak dokładnie masz to zrobione i co trzeba uzyskać.

 

PS tytułuj normalnie tematy na forum, bo ostatnich kilka i niektóre wcześniejsze mówią tylko że jest "problem" (jak w większości tematów tutaj) i wskazują język, który już przecież określa kategoria

komentarz 23 lutego 2019 przez zerakot Obywatel (1,870 p.)
No teraz rozumiem, że pętla ma generować strukturę
komentarz 24 lutego 2019 przez zerakot Obywatel (1,870 p.)
edycja 24 lutego 2019 przez zerakot

I jak teraz mam zrobić, aby jeśli mam produkty o nazwie np.: woda mineralna i woda gazowana (wyszukam "woda") to jak mam je rozdzielić, aby trafiły do różnych divów, skoro są wyjęte jednym zapytaniem?

Kod:

<div class="produktwyszukany">
				<div class="nazwa">
				<?php if($wynik = $mysqli->query($query)) 
				{
					while($row = $wynik->fetch_assoc()) 			
					printf("%s %s\n", "<img src='".$row["zdjecie"]."'/>", $row["nazwa"]);
					printf("%s %s\n", $row["kategoria"], $row["cena"]);
				} ?>
				</div>
				<div class="kupprodukt">KUP</div>
				<div class="opis" onhover="opis()">OPIS</div>
</div>	

 

komentarz 24 lutego 2019 przez Arkadiusz Waluk Ekspert (287,550 p.)

Zakładając, że $row jest wierszem zawierającym jeden produkt i każdy produkt powinien znaleźć się w całym elemencie o klasie produktwyszukany to bardzo prosto:

<?php
// ...
$wynik = $mysqli->query($query);
while ($row = $wynik->fetch_assoc()) {
    echo '<div class="produktwyszukany">' . $row['nazwa'] . ' ... </div>';
}

Oczywiście musisz to sobie rozbudować o dalszą konieczną strukturę. No i idealnie byłoby nie mieszać logiki z HTML i stosować inne dobre praktyki, ale to chyba nie na teraz temat. Nie wiem czy mi się to wydaje tak proste, czy może źle tłumaczę, czy nie rozumiem co trzeba zrobić i jest to faktycznie tak trudne.

komentarz 24 lutego 2019 przez zerakot Obywatel (1,870 p.)
No to już widzę problem, ponieważ ja nie używałem kropki przy $row, ale przecinki. Dobrze pan tłumaczy, po prostu ja źle zrozumiałem. Dziękuję za pomoc.
komentarz 24 lutego 2019 przez Arkadiusz Waluk Ekspert (287,550 p.)
Jeśli mowa o printf, którego używałeś, to tam być powinny przecinki, bo podajesz kolejne argumenty. Ja po prostu zrobiłem konkatenację stringów i wyświetliłem je przez echo (normalnie jak wspomniałem to powinno być całkowicie inaczej, rozwiązanie na szybko).

Jeżeli to co podałem jest dobrze, to Twoim problemem było robienie pętli gdzieś wewnątrz jednego produktu, a nie pętli generującej całe struktury HTML po jednej dla każdego produktu.

Podobne pytania

0 głosów
2 odpowiedzi 293 wizyt
pytanie zadane 15 lutego 2019 w SQL, bazy danych przez zerakot Obywatel (1,870 p.)
0 głosów
1 odpowiedź 187 wizyt
pytanie zadane 21 lutego 2019 w SQL, bazy danych przez zerakot Obywatel (1,870 p.)
0 głosów
0 odpowiedzi 130 wizyt
pytanie zadane 20 lutego 2019 w SQL, bazy danych przez zerakot Obywatel (1,870 p.)

92,452 zapytań

141,262 odpowiedzi

319,085 komentarzy

61,854 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Akademia Sekuraka 2024 zapewnia dostęp do minimum 15 szkoleń online z bezpieczeństwa IT oraz dostęp także do materiałów z edycji Sekurak Academy z roku 2023!

Przy zakupie możecie skorzystać z kodu: pasja-akademia - użyjcie go w koszyku, a uzyskacie rabat -30% na bilety w wersji "Standard"! Więcej informacji na temat akademii 2024 znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...