Autor | Zpráva | ||
---|---|---|---|
davef6 Profil |
#1 · Zasláno: 23. 1. 2009, 10:49:06
Dobrý den,
mám tento dotaz SELECT uzivatele.online, uzivatele.id, uzivatele.prezdivka, profil_data.vek, profil_data.kraj, profil_data.pohlavi, profil_data.hl_foto FROM uzivatele left join profil_data on uzivatele.id=profil_data.id_uziv left join foto on uzivatele.id = foto.id_uziv WHERE $oddo $uz_online $p $kraj $poh ORDER BY hl_foto DESC, img_thumb DESC, vip DESC, prezdivka LIMIT $zacatek,$konec který vypisuje data ze 3 tabulek......uzivatele, profil_data a foto, problém spočívá v tom, že to má vyhledávat uživatele (uzivatele), ukazovat to u nich údaje (profil_data) a jejich foto (foto), ale když dám vyhledat, tak se mi uživatel ukáže tolikrát kolik má fotek v tabulce foto. Mělo by se to dát eliminovat distinct, ale nevím jak to přesně použít. Děkuji za odpovědi |
||
bob.99 Profil * |
#2 · Zasláno: 23. 1. 2009, 10:54:58
A co použít klausili GROUP BY ?
|
||
Mastodont Profil |
#3 · Zasláno: 23. 1. 2009, 11:02:06
Co je "profil_data.hl_foto"? Hlavní foto? Pokud ano, tak bych už další tabulku foto vynechal, ne? Mmch, nechápu rozdělení údajů o uživateli do tabulek uzivatele a profil_data - věk, kraj, pohlaví, to jsou přece atributy uživatele stejně jako přezdívka.
|
||
davef6 Profil |
#4 · Zasláno: 23. 1. 2009, 11:11:57
ano profil_data.hl_foto je hlavní foto, bohužel jsou tabulky ne zrovna nejlépe navržené, tak se hlavní foto ukládá do tabulky profil_data. Já bych potřeboval do tohoto začlenit že pokud nebude hlavní foto tak se vybere poslední vložené foto z tabulky foto. Což už to provádí, jen mi to pouze dělá duplicitní hodnoty pokud je v tabulce foto více než 1 fotka. Zkoušel jsem to group by, ale bohužel se mi to nepovedlo rozchodit.
|
||
Mastodont Profil |
#5 · Zasláno: 23. 1. 2009, 11:18:30
pokud nebude hlavní foto tak se vybere poslední vložené foto z tabulky foto
To je blbý návrh. První foto v tabulce fotky dát jako hlavní, uživateli případně dát i volbu určit jinou fotku jako hlavní. Do tabulky foto doplnit sloupec s příznakem, podle kterého by se hlavní fotka vybírala. Do tabulky profil bych žádné foto nedával. WHERE foto.hlavni = 1 (true) |
||
davef6 Profil |
#6 · Zasláno: 23. 1. 2009, 12:25:03
teď to mám podle Mastodonta a příznakem asi takto
SELECT foto.img_thumb, uzivatele.online, uzivatele.id, uzivatele.prezdivka, profil_data.vek, profil_data.kraj, profil_data.pohlavi FROM uzivatele left join profil_data on uzivatele.id=profil_data.id_uziv left join foto on uzivatele.id = foto.id_uziv WHERE $oddo $uz_online $p $kraj $poh ORDER BY foto.hl DESC, vip DESC, prezdivka LIMIT $zacatek,$konec ale pořád je tam problém že pokud má uživatel víc fotek, tak se tam ukáže několikrát, což potřebuju odbourat, podle WHERE foto.hlavni = 1 (true) to nemohu udělat protože potřebuji ukázat i ostatní uživatele, kteří mají foto ,ale nemají nastavené hlavní foto (zobrazí se jim poslední vložené foto) |
||
Kajman_ Profil * |
Co to zkusit trošku jinak... kolerovaným poddotazem... možná takto nějak
SELECT (select foto.img_thumb from foto where uzivatele.id = foto.id_uziv order by foto.hl desc, foto.id desc limit 1) img_thumb, uzivatele.online, uzivatele.id, uzivatele.prezdivka, profil_data.vek, profil_data.kraj, profil_data.pohlavi FROM uzivatele left join profil_data on uzivatele.id = profil_data.id_uziv WHERE $oddo $uz_online $p $kraj $poh ORDER BY vip DESC, prezdivka LIMIT $zacatek, $konec |
||
davef6 Profil |
#8 · Zasláno: 23. 1. 2009, 14:09:15 · Upravil/a: davef6
tak bohužel toto nic nenajde, kontroloval jsem případné překlepy a tím to taky nebude
|
||
Kajman_ Profil * |
#9 · Zasláno: 23. 1. 2009, 14:13:40
Nenajde fotku a ostatní údaje vypíše, nebo nejsou splněné podmínky z where, které tam máte jako proměnné?
|
||
davef6 Profil |
#10 · Zasláno: 23. 1. 2009, 14:17:49
nevypíše vůbec nic........dobré bude asi když to tu víc rozvedu.....důležité věci:
if ($_POST['onl'] > '0') $uz_online = " and uzivatele.online = '1'"; if ($_POST['kraj'] > '0') $kraj = " and profil_data.kraj = '".addslashes($_POST["kraj"])."'"; if (!empty($_POST['p'])) $p = " and profil_data.pohlavi = '".addslashes($_POST["p"])."'"; if (!empty($_GET['p'])) $poh = " and profil_data.pohlavi = '".addslashes($_GET["p"])."'"; if ($_POST['od'] > '0' || $_POST['do'] > '0') $oddo = " profil_data.vek between ".addslashes($_POST["od"])." and ".addslashes($_POST["do"]).""; a pak tam je už toto známé $prikaz = MySQL_Query("SELECT (select foto.img_thumb from foto where uzivatele.id = foto.id_uziv order by foto.hl desc, foto.id desc limit 1) img_thumb, uzivatele.online, uzivatele.id, uzivatele.prezdivka, profil_data.vek, profil_data.kraj, profil_data.pohlavi FROM uzivatele left join profil_data on uzivatele.id = profil_data.id_uziv WHERE $oddo $uz_online $p $kraj $poh ORDER BY uzivatele.vip DESC, uzivatele.prezdivka LIMIT $zacatek, $konec") or (mysql_error()); |
||
Kajman_ Profil * |
Nechtěl jste si tu chybu vypsat, když k ní dojde? Třeba se dozvíte, že sloupec foto.id neexistuje a musíte si tam dosadit sloupeček podle svého návrhu.
or die(mysql_error()); |
||
davef6 Profil |
#12 · Zasláno: 23. 1. 2009, 14:46:44 · Upravil/a: davef6
děkuji, vyzkouším
|
||
davef6 Profil |
#13 · Zasláno: 23. 1. 2009, 14:53:50
už to funguje, jen malinko jinak než bych potřeboval:) potřeboval jsem vypsat napřed všechny uživatele, kteří mají hlavní foto, pak všechny uživatelé kteří mají foto a nemají hlavní foto a nakonec uživatele bez fotek
|
||
Kajman_ Profil * |
#14 · Zasláno: 23. 1. 2009, 15:11:28
A může to být na původní návrh, že je hlavní foto v profilu?
|
||
davef6 Profil |
#15 · Zasláno: 23. 1. 2009, 15:14:24
nejlepší by to bylo s tím hlavním fotem v příznaku, ale kdyby to jinak nešlo, tak je mi jedno jak hlavně když to pujde:) dneska už se s tím trápím celkem dlouho
|
||
davef6 Profil |
#16 · Zasláno: 24. 1. 2009, 14:29:37
dosadil jsem tam group by foto.id_uziv, ale vypíše to pouze uživatelé, kteří mají fotku a ty ostatní ne:(
|
||
Kajman_ Profil * |
#17 · Zasláno: 24. 1. 2009, 19:21:01
Možná by to šlo takto nějak. Nevím, jak to bude rychlé při velkém počtu obrázků.
select o.img_thumb, uzivatele.online, uzivatele.id, uzivatele.prezdivka, profil_data.vek, profil_data.kraj, profil_data.pohlavi from (select f1.* from foto f1 left join foto f2 on f1.id_uziv=f2.id_uziv and (f1.hl<f2.hl or (f1.hl=f2.hl and f1.id<f2.id)) where f2.id is null ) o right join uzivatele on uzivatele.id = o.id_uziv left join profil_data on uzivatele.id = profil_data.id_uziv where $oddo $uz_online $p $kraj $poh order by o.hl desc, vip desc, prezdivka limit $zacatek, $konec |
||
davef6 Profil |
#18 · Zasláno: 25. 1. 2009, 15:38:15
díky, vyzkouším
|
||
Časová prodleva: 15 let
|
0