Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [MySQL][PHP]Zapytanie mysql z tablicy
crew123
post 8.12.2012, 20:54:53
Post #1





Grupa: Zarejestrowani
Postów: 89
Pomógł: 0
Dołączył: 25.02.2012

Ostrzeżenie: (0%)
-----


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
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 6)
thek
post 8.12.2012, 23:57:34
Post #2





Grupa: Moderatorzy
Postów: 4 362
Pomógł: 714
Dołączył: 12.02.2009
Skąd: Jak się położę tak leżę :D




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.


--------------------
Najpierw był manual... Jeśli tam nie zawarto słów mądrości to zapytaj wszechwiedzącego Google zadając mu własciwe pytania. A jeśli i on milczy to Twój problem nie istnieje :D
Go to the top of the page
+Quote Post
crew123
post 9.12.2012, 12:04:58
Post #3





Grupa: Zarejestrowani
Postów: 89
Pomógł: 0
Dołączył: 25.02.2012

Ostrzeżenie: (0%)
-----


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"
Go to the top of the page
+Quote Post
d3ut3r
post 9.12.2012, 13:02:14
Post #4





Grupa: Zarejestrowani
Postów: 709
Pomógł: 176
Dołączył: 24.10.2010

Ostrzeżenie: (0%)
-----


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.


--------------------
http://d3ut3r.wordpress.com/ | mysql_* jest przestarzałe UŻYWAJ PDO!
Go to the top of the page
+Quote Post
crew123
post 9.12.2012, 21:41:27
Post #5





Grupa: Zarejestrowani
Postów: 89
Pomógł: 0
Dołączył: 25.02.2012

Ostrzeżenie: (0%)
-----


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 :/
Go to the top of the page
+Quote Post
wNogachSpisz
post 9.12.2012, 21:57:11
Post #6





Grupa: Zarejestrowani
Postów: 1 233
Pomógł: 87
Dołączył: 6.03.2009

Ostrzeżenie: (40%)
XX---


Nazwy kolumn mówią tak dużo, że pozostaje tylko usiąść i gorzko zapłakać.
Go to the top of the page
+Quote Post
crew123
post 10.12.2012, 16:55:47
Post #7





Grupa: Zarejestrowani
Postów: 89
Pomógł: 0
Dołączył: 25.02.2012

Ostrzeżenie: (0%)
-----


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 :|
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 19.07.2025 - 17:07