Autor | Zpráva | ||
---|---|---|---|
Peet Profil |
#1 · Zasláno: 4. 10. 2014, 17:11:51
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 |
#3 · Zasláno: 5. 10. 2014, 10:59:19
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 |
#4 · Zasláno: 5. 10. 2014, 11:05:05
Peet:
„takto to právě použít nemohu..“ Proč? Stačí do dotazu vygenerovat více where klauzulí. |
||
Peet Profil |
#5 · Zasláno: 5. 10. 2014, 11:31:44 · Upravil/a: Peet
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 |
#6 · Zasláno: 5. 10. 2014, 13:26:31
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 |
#7 · Zasláno: 7. 10. 2014, 18:29:26
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 |
#8 · Zasláno: 7. 10. 2014, 18:42:43
IN je zkrácený zápis OR
WHERE (question_id,answer) in ( (12,'odpoved'),(13,'prvni'),(13,'druha') ) |
||
Peet Profil |
#9 · Zasláno: 7. 10. 2014, 18:55:05 · Upravil/a: Peet
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 |
#10 · Zasláno: 7. 10. 2014, 19:08:00
WHERE samo o sobě nevypisuje data, problém bude asi jinde než v uvedené části.
|
||
Časová prodleva: 11 let
|
0