Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [SQL][MySQL]MySQL Jak pobrać określone dane?
Forum PHP.pl > Forum > Przedszkole
Marasek22
Witam, mam pewien problem. Mam kolumny w tabeli [string][id_account], chcę pobrać dane wszystkich gdzie string równe Jan i string równe Nowak o takim samym numerze [id_account] i wynik chcę mieć zestawiony w jednym wierszu. Np:
Jan Nowak 2234
Jan Nowak 2891
Jan Nowak 093
Sephirus
Hmm nie widzę tu problemu:

  1. SELECT string,id_account FROM tabelka WHERE string LIKE 'Jan%' AND string LIKE '%Nowak'
  2.  
  3. -- lub jeśli znasz kolejność tych słów:
  4.  
  5. SELECT string,id_account FROM tabelka WHERE string LIKE '%Jan%Nowak%'


Nie jest to najwydajniejsze ale chyba o to Ci chodziło

Marasek22
Nie o to chodzi. Każde słowo to osobny rekord. Jan to osobny rekord i Nowak to osobny rekord. Każde słowo ma swój id_account.

Przykładowo chce wybrać 'Jan Nowak to pospolity obywatel' Każde słowo to osobny string.
Jan id=20 id_acount=10
Nowak id=129 id_acount=10
towar id=200 id_acount=11
to id=1280 id_acount=10
nigdy id=1290 id_account=11
pospolity id=1300 id_acount=10
Nowak id=1310 id_acount=15
obywatel id=1315 id_acount=10

W rezultacie zapytania chcę otrzymać Jan Nowak to pospolity obywatel 10
Z czego najważniejszy jest rezultat czyli id_account.
Sephirus
kumam smile.gif (chyba tongue.gif)

  1. SELECT GROUP_CONCAT(DISTINCT string SEPARATOR ' '), id_account FROM tabelka WHERE string LIKE '%Jan%' OR string LIKE '%Nowak%' GROUP BY id_account


?
Marasek22
Cytat(Sephirus @ 4.06.2012, 13:47:27 ) *
kumam smile.gif (chyba tongue.gif)

  1. SELECT GROUP_CONCAT(DISTINCT string SEPARATOR ' '), id_account FROM tabelka WHERE string LIKE '%Jan%' OR string LIKE '%Nowak%' GROUP BY id_account


?

MySQL zwrócił pusty wynik (zero rekordów). ( Wykonanie zapytania trwało 0.0011 sekund(y) ) ;/
Sephirus
hmmm to powinno działać ... to proste zapytanie :/
Marasek22
Częściowo zapytanie działa już. Problem teraz tylko że szukam np Jan Nowak a zwróci Jan Nowak a w dalszych rekordach np samo Jan. Operator AND nic nie pomaga i zwraca zero rekordów.

Dla potomnych:
CODE
SELECT GROUP_CONCAT( DISTINCT `string`
SEPARATOR ' ' ) , `id_acount`
FROM `customers`
WHERE `string` LIKE 'jan'
OR `string` LIKE 'nowak'
GROUP BY `id_acount`
HAVING GROUP_CONCAT( DISTINCT `string`
SEPARATOR ' ' ) = 'jan nowak'
Sephirus
Masz rację tak by to działało... zatem:

  1. SELECT GROUP_CONCAT( DISTINCT `string`
  2. SEPARATOR ' ' ) AS `strings` , `id_acount`
  3. FROM `customers`
  4. GROUP BY `id_acount`
  5. HAVING `strings` LIKE '%jan%'
  6. AND `strings` LIKE '%nowak%'


Można to ulepszyć jeszcze smile.gif
Marasek22
Cytat(Sephirus @ 4.06.2012, 16:11:23 ) *
Masz rację tak by to działało... zatem:

  1. SELECT GROUP_CONCAT( DISTINCT `string`
  2. SEPARATOR ' ' ) AS `strings` , `id_acount`
  3. FROM `customers`
  4. GROUP BY `id_acount`
  5. HAVING `strings` LIKE '%jan%'
  6. AND `strings` LIKE '%nowak%'


Można to ulepszyć jeszcze smile.gif

Też działa, tylko wolniej. Moje zapytanie 0,5 sek, w twoim przypadku aż 5,5 sek, no i nie zwraca wszystkich rekordów więc coś nie teges chyba
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.