Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [MySQL][PHP]Zapytanie mysql z tablicy
Forum PHP.pl > Forum > Przedszkole
crew123
Witam. Mam taki problem, otóż robię szukajkę z chceckboxami zapisywanymi do tablicy opcje[] i chce wyswietlic wszystkie ogloszenia ktore te opcje mają, z jednym daje rade ale z wieloma jest ciężko, struktura bazy z opcjami:
id|id_oglo|id_oglo_opcje|

- id_oglo - id ogloszenia
- id_oglo_opcje - id/nazwa treści chceckboxa np: Hodowlane

próbuję to wyciągnąć takim sposobem:

  1. if (!empty($_GET['opcje'])) {
  2. foreach($_GET['opcje'] as $options) {
  3. $tab[] = "dodatkowo.id_oglo_opcje = '".$options."'";
  4. }
  5. }
  6.  
  7. if (!empty($tab)) {
  8. $wheretab = 'WHERE '.implode(' AND ', $tab);
  9. }
  10.  
  11. $sql = mysql_query("SELECT * FROM ogloszenia LEFT JOIN(dodatkowo) ON (ogloszenia.id=dodatkowo.id_oglo) $wheretab ORDER BY ogloszenia.id DESC") or die(mysql_error());


lecz wyswietlaja mi sie tylko pierwsze zaznaczone chckboxy, przy zaznaczeniu wiecej niz 1 checkboxa nie wyswietla ogloszen, wiem ze problem lezy w tym AND... tylko nie wiem jak zrobic aby zczytywalo wszystkie gdy np: id_oglo='100'.
Proszę o jakieś wskazówki smile.gif
thek
Na początek to weź sobie przed zapytaniem wyświetl zawartość $wheretab i włącz wyświetlanie błędów. A najlepiej jeśli już sklejasz w ten sposób zapytanie, to je też sobie wyświetl, bo można się łatwo dziabnąć i spowodować syntax error. Ogólnie podejście jest poprawne logicznie. Sam tak kiedyś robiłem, dopóki nie zacząłem używać query builderów. Ale gdy byłem zmuszony do korzystania z klejenia nieokreślonej ilości warunków where w sql na żywca, to identyczne podejście (tablica + implode) stosowałem. Podejrzewam więc błąd składni, a nie logiki samej w sobie.
crew123
chodzi o to, że sczytuje tylko pierwszy wynik z tabeli dodatkowo (podana struktura wyżej) gdzie id_oglo='100', gdy w tabeli jest np: 5 rekordów gdzie w tabeli jest id_oglo='100', nie wiem jak zrobić, aby brało pod uwagę wszystkie te rekordy. Składnia jest OK

Co myślcie, o tym żeby whilem wyciągnąć id ktore spelnia warunek id_oglo_opcje=$options, zapisac do tablicy i same id ogloszen wyjac i dac w zapytaniu where id="100"
d3ut3r
podaj jakieś dane z tych tabel, jeżeli się nie mylę to przykładowo masz tam:

id|id_oglo|id_oglo_opcje|
1 10 1 (Hodowlane)
2 10 2 (Inne)
3 12 1 (Hodowlane)

i teraz jeżeli chcesz wyciągnąć wszystkie ogłoszenia które mają Hodowlane i Inne to jedyne zapytanie które przychodzi mi do głowy to:

  1. SELECT id_oglo FROM `tabelka` WHERE id_oglo_opcje IN (1,2)
  2. GROUP BY id_oglo
  3. HAVING COUNT(id_oglo_opcje)=2


ewentualnie coś takiego:

  1.  
  2. SELECT id_oglo FROM `tabelka`
  3. GROUP BY id_oglo
  4. HAVING GROUP_CONCAT(id_oglo_opcje SEPARATOR "|")="1|2"
  5.  


Być może jednak istnieje lepsze rozwiązanie.
crew123
Tylko chcę aby wgrzebać id_oglo ktore maja np: hodowalne, inne i za pomoca tego id wyswietlic dane z innej tabeli, nie wiem jak to zrobic :/
wNogachSpisz
Nazwy kolumn mówią tak dużo, że pozostaje tylko usiąść i gorzko zapłakać.
crew123
Zapłakać można patrząc na Twój post, kolega wyżej bardzo fajnie wszystko zrozumiał... no ale cóż, do niektórych trzeba mówić językiem którego niestety nie znam :|
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.