Autor Zpráva
Peet
Profil
Dobrý den, snažím se přijít na následující řešení:

používám takto strukturovaný select, příklad:
SELECT * FROM..... ... WHERE (question_id,answer_id) in ((12,'test')(28,'test2')(18,test3')).. group,distinct, atp..

já z něho nyní potřebuji udělat něco takového:
SELECT * FROM..... ... WHERE (question_id,answer_id) in ((12,'%test%')(28,'%test2%')(18,%test3%')).. group,distinct, atp..

já nikdy předem nevím kolik a jaké otázky bude uživatel vyhledávat ale potřebuji v klauzuli IN nějak použít LIKE pro answer..

SELECT jsem postavil dle vašich rad viz níže.
join existence více než jednoho řádku

Jen bych ho potřeboval rozšířit o LIKE. Děkuji mnohokrát
Kajman
Profil
where (   (question_id=12 and answer_id like '%test%')
       or (question_id=28 and answer_id like '%test2%')
       or (question_id=18 and answer_id like '%test3%')
      )

Ale hledat likem v id sloupci je divné a bude to výrazně pomalejší.
Peet
Profil
takto to právě použít nemohu..

select mám takto:
$query = hlavni select + par joinu;

a nyni pridam do filtru nejake otazky s odpovedmi
pole $varchar = array('(12)("test")','(28)("test2")',...);


$query->where('(varchar.question_id,varchar.answer) in (' . implode(",", $varchar) . ')')->group('varchar.client_id')->having('COUNT(distinct varchar.question_id,varchar.answer) = ' . count($varchar));

a nyní ho potřebuji předělat tak abych v něm mohl použít LIKE..
Alphard
Profil
Peet:
takto to právě použít nemohu..
Proč? Stačí do dotazu vygenerovat více where klauzulí.
Peet
Profil
vyzkouším to a napíši zda to funguje.


Tak to nefunguje, protože když projedu foreachem všechny varchar a dám vzdy orWhere() tak to sice funguje, ale zase to nefunguje korektne s ostatnimi filtry ktere jsou v selectu obsazeny.. spojuji totiz 3 tabulky a potrebuji vyhledat vsechny client_id ktere splnuji podminku ze vsech 3 tabulek.. proto to zkratka musi byt obsahle v jednom jedinem where pomocí IN nemohu to projizdet foreachem a pridavat podminky.. takže předpokládám že zde LIKE pouzit nelze :/
Tori
Profil
Peet:
když projedu foreachem všechny varchar a dám vzdy orWhere() tak to sice funguje, ale zase to nefunguje korektne s ostatnimi filtry
Pokud používáte OR pro jednotlivé sloupce v tomto filtru a AND pro ostatní filtry, tak možná máte jen špatně závorkování ve WHERE.
Peet
Profil
a dá se použít OR v IN ?

například takto:

WHERE (question_id,answer) in ( (12,'odpoved'),(13,'prvni OR druha') )

děkuji za odpověď
Kajman
Profil
IN je zkrácený zápis OR

WHERE (question_id,answer) in ( (12,'odpoved'),(13,'prvni'),(13,'druha') )
Peet
Profil
jenze dam priklad:

tabulka answers a v ni je

client_id, question_id, answer
1 12 prvni
2 12 druha

a ja potrebuji aby mi tenhle zápis
WHERE (question_id,answer) in ( (12,'prvni'),(12,'druha') )

vypsal client_id: 1 a 2, což neudělá..


Už to funguje, problém by v tom, že na konci dotazu jsem měl having který kontroloval počet odpovezenych otazek s poctem existujicich, nyní už to běží díky moc :)
Kajman
Profil
WHERE samo o sobě nevypisuje data, problém bude asi jinde než v uvedené části.

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm: