Autor Zpráva
25k_half_sick
Profil *
Zdravim,

potrebuji vybrat z database uzivatele kteri splnuji vsech 10 podminek


id_zadani id_variant
372 876
374 882
376 889
381 901
386 912
387 913
391 925
395 937
397 943
398 945

---------


SELECT * FROM `soutezOdpovedi`

WHERE
(Id_zadani = 372 AND Id_variant = 876)
AND
(Id_zadani = 374 AND Id_variant = 882)
AND
(Id_zadani = 376 AND Id_variant = 889)
AND
(Id_zadani = 381 AND Id_variant = 901)
AND
(Id_zadani = 386 AND Id_variant = 912)
AND
(Id_zadani = 387 AND Id_variant = 913)
AND
(Id_zadani = 391 AND Id_variant = 925)
AND
(Id_zadani = 395 AND Id_variant = 937)
AND
(Id_zadani = 397 AND Id_variant = 943)
AND
(Id_zadani = 398 AND Id_variant = 945)


ANDDER BY Id_user ASC

=> 0 radku

a s operatorem OR

to vybere i usery kteri splnili treba jen 1x podminku.

Jak na to? Nejak tusim ze by se to melo 10x zjoinovat ale nevim jak :/
DJ Miky
Profil
ANDDER BY

Nepoužívej 'nahradit vše', jinak ti to napíše syntax error.

K problému: Nechápu, o co ti jde. Jeden uživatel snad nemůže mít v jednom sloupci všech 10 hodnot, nebo ne? Jestli to dobře chápu, tak je řešením nahradit AND za OR mezi dvojicemi podmínek:

WHERE
(Id_zadani = 372 AND Id_variant = 876)
OR
(Id_zadani = 374 AND Id_variant = 882)
OR
(Id_zadani = 376 AND Id_variant = 889)
OR
atd.
25k_half_sick
Profil *
Nemuze mit samozrejme v 1 sloupci tolik hodnit, co hodnota to novy radek.
Or vybere i uzivatele kteri maji dobre treba jen 1 kombinaci
25k_half_sick
Profil *
OR nemuze byt diky tomu co jsem rekl
a
and – program hleda jednu radku ktera splnuje podminky – neexistuje radka ktera ma zaroven vsech 10 variant zadani

vyresil by to subselect..ale mam bohuzel jen 4.0



KAJMAN: SOS
Joker
Profil
25k_half_sick
Nechápu dotaz. Z dotazu vyznívá, že ty řádky jsou z tabulky uživatelů- potom je ale dotaz nesmysl, každý uživatel může logicky mít jen jednu kombinaci podmínek.

Spíš to ale vypadá, že jde o nějakou jinou tabulku, která má nějakou vazbu na tabulku uživatelů. Abych to tedy rozšmodrchal, tak je zadáním problému najít v tabulce uživatelů takové, kteří mají v té druhé tabulce všech těch deset záznamů??
25k_half_sick
Profil *
Hele ... jedna se o jednu tabulku.

=> soutezOdpovedi

v ni je

Id_user | Id_zadani | Id_variant

1 | 1 | 1
1 | 2 | 7
1 | 3 | 8
.
.


Kazdy user muze na 1 zadani zvolit 1 variantu.

Chci vybrat UZIVATELE (Id_user) , kteri odpovedeli na konkretnich 10 zadani, 10x spravne.

Je to takhle srozumitelne?
koudi
Profil
25k_half_sick
Tak jak to máš, to podle mě nepůjde. Protože WHERE porovnává jen hodnoty jednoho řádku. A v jednom řádku máš vždycky jednu hodnotu. A ty chceš takhle řádek, kterej má Id_zadani = 372 a Id_zadani = 373 a Id_zadani = 374 atd (plus samozřejmé správné odpovědi) což nikdy nemůže být.
25k_half_sick
Profil *
select u.id
from useraccounts u
join `soutezOdpovedi` o1 on o1.Id_user = u.Id
join `soutezOdpovedi` o2 on o2.Id_user = u.Id
join `soutezOdpovedi` o3 on o3.Id_user = u.Id
join `soutezOdpovedi` o4 on o4.Id_user = u.Id
join `soutezOdpovedi` o5 on o5.Id_user = u.Id
join `soutezOdpovedi` o6 on o6.Id_user = u.Id
join `soutezOdpovedi` o7 on o7.Id_user = u.Id
join `soutezOdpovedi` o8 on o8.Id_user = u.Id
join `soutezOdpovedi` o9 on o9.Id_user = u.Id
join `soutezOdpovedi` o10 on o10.Id_user = u.Id


WHERE

(o1.Id_zadani = 372 AND o1.Id_variant = 876)
AND
(o2.Id_zadani = 374 AND o2.Id_variant = 882)
AND
(o3.Id_zadani = 376 AND o3.Id_variant = 889)
AND
(o4.Id_zadani = 381 AND o4.Id_variant = 901)
AND
(o5.Id_zadani = 386 AND o5.Id_variant = 912)
AND
(o6.Id_zadani = 387 AND o6.Id_variant = 913)
AND
(o7.Id_zadani = 391 AND o7.Id_variant = 925)
AND
(o8.Id_zadani = 395 AND o8.Id_variant = 937)
AND
(o9.Id_zadani = 397 AND o9.Id_variant = 943)
AND
(o10.Id_zadani = 398 AND o10.Id_variant = 945)



neco takovyho ale hazi mi to naky divny vysledky
nothrem
Profil
použij místo join celkový výběr, tedy
SELECT * FROM usersccounts AS u , soutezodpoved AS o1, soutezodpoved AS o2, ... WHERE (u.id = o1.id) AND ...

pak to vybere jen řádky, které existují ve všech 'tabulkách'...
tiso
Profil
zmeň si štruktúru databázy, nemáš to dobre navrhnuté...
25k_half_sick
Profil *
Ja to nenavrhoval, ja z toho mam pouze cosi vycucat.
Nicmene jsem to udleal tak ze jsem si postupne udelal 10 SQL ty jsem naplacl do docasne tabulky a z te jsem pomoci GRUPOVACICH fci zjistil lidi co tam jsou 10x a to jsou Ti slavni users.


Tiso > navrhni lepsi ...

To ALL: diky za snahu
tiso
Profil
25k_half_sick
Záleží od toho čo to je a čo to má všetko robiť...
25k_half_sick
Profil *
tiso > sorry ale tvoje odpovedi jsou ve velkem pripade k nicemu.
Takto teoreticky umi odpovedet kazdy mamlas.

Strukturu kterou nekdo vytvoril jsem UKAZAL, to co z ni chci DOSTAT jsem REKL , tak mi bud porad primo, nebo radsi nereaguj.
Joker
Profil
25k_half_sick
Nicmene jsem to udleal tak ze jsem si postupne udelal 10 SQL ty jsem naplacl do docasne tabulky a z te jsem pomoci GRUPOVACICH fci zjistil lidi co tam jsou 10x a to jsou Ti slavni users.
Stejně "neelegantní" řešení, ale možná jednodušší, by myslím bylo toto:
SELECT id_user, count(id_user) AS pocet FROM `soutezOdpovedi` WHERE (Id_zadani = 372 AND Id_variant = 876) OR (Id_zadani = 374 AND Id_variant = 882) OR (...) GROUP BY id_user ORDER BY pocet DESC

a potom ve skriptu brát jenom řádky, kde pocet=10.
Obě řešení vyžadují zásah do skriptu, ale to moje dělá jen jeden dotaz do databáze a nepotřebuje dočasnou tabulku.
nightfish
Profil
Joker
v tom případě by možná už bylo lepší použít rovnou
SELECT id_user, count(id_user) AS pocet FROM `soutezOdpovedi` WHERE (Id_zadani = 372 AND Id_variant = 876) OR (Id_zadani = 374 AND Id_variant = 882) OR (...) GROUP BY id_user HAVING pocet = 10 ORDER BY pocet DESC...
25k
Profil *
Joker > Mno ja to udelal nakonec pomoci 2x operatoru IN() .
nightfish > zitra zkusim, diky , to me nenapadlo.
tiso
Profil
25k_half_sick
Odpoveď je k ničomu keď je k ničomu otázka... Ťažko niečo navrhnúť keď neviem podrobnosti, riešení je kopec... Uviedol si jednu tabuľku, neuviedol si ako vyzerajú ostatné, ani čo to celé ešte robí, má robiť. Chcel som po Tebe podrobnosti, ty si miesto toho napísal že moje odpovede sú k ničomu - ale keď neviem tie ďalšie konkrétne veci tak Ti poradiť neviem, a preto píšem všeobecne.
Každopádne si si to vyriešil cez dočasnú tabuľku, takže je zbytočné to riešiť ďalej...
Toto téma je uzamčeno. Odpověď nelze zaslat.