Autor | Zpráva | ||
---|---|---|---|
MartinKloubek Profil |
#1 · Zasláno: 6. 12. 2006, 16:01:39
Dobrý den,
mám tabulku kde jsou 3 sloupky email1,email2,email3 potřeboval bych dotaz který mi vypíše ty emaily které jsou duplicitní. Ale nejen ve sloupkách email1,2,3 ale i vzájemně to znamená pokud je stejný třeba obsah v email1 a email3 každý v jiném řádku. Upozornuji že sloupky nejde dát jako unikátní je potřeba aby některé byli duplicitní jen je potřeba aby je bylo možno vypsat. Udělal jsem script který to dokáže ale těch řádku je 15000 a zamrzne prohlížeč jelikož to mám moc složité. Nedjřív uzavřu do pole všechny emaily což je cca 45000 polí a pak je porovnávám zda jsou v 1,2,3 víckrát nežli jednou a to je moc dotazů do databáze. jde to řešit nějakým přímým dotazem který by rovnou vypsal do pole názvy duplicitních a pak bych jen z pole vypsal ty které jsou stejné? díky za pomoc. |
||
Kajman_ Profil * |
#2 · Zasláno: 6. 12. 2006, 16:16:32
Možná takhle nějak...
select tmp.email from (select email1 as email from tabulka union all select email2 as email from tabulka union all select email3 as email from tabulka) tmp group by tmp.email having count(*)>1 |
||
nightfish Profil |
#3 · Zasláno: 6. 12. 2006, 16:17:42 · Upravil/a: nightfish
select em1 from email where em1 in (select em2 from email) or em1 in (select em3 from email);
select em2 from email where em2 in (select em1 from email) or em1 in (select em3 from email); select em3 from email where em3 in (select em1 from email) or em1 in (select em2 from email); select em1 from email group by em1 having count(em1) > 1; select em2 from email group by em2 having count(em2) > 1; select em3 from email group by em3 having count(em3) > 1; ...těchhle 6 dotazů by to mohlo (velmi neobratně) řešit a zřejmě tam budou nějaké duplicity ale nic lepšího mě momentálně nenapadlo, nicméně nic není ztraceno, třeba příjde Kajman nebo někdo jiný s lepším řešením EDIT: ...pozdě a neefektivně, ale přece... |
||
MartinKloubek Profil |
#4 · Zasláno: 6. 12. 2006, 16:51:45
ten od Kajmana je super. Funguje perfektně.
jen ještě dotaz když bych chtěl do tohoho dotazu podmínku WHERE neco='a' kam? Podmínka platí pro celou tabulku tedy celý řádek. select tmp.email from (select email1 as email from tabulka union all select email2 as email from tabulka union all select email3 as email from tabulka) tmp group by tmp.email having count(*)>1 |
||
Kajman_ Profil * |
#5 · Zasláno: 6. 12. 2006, 17:00:55
třikrát za slovo tabulka
|
||
MartinKloubek Profil |
#6 · Zasláno: 6. 12. 2006, 17:05:17
jsem si to myslel dík... :)
|
||
MartinKloubek Profil |
#7 · Zasláno: 6. 12. 2006, 17:21:36
Asi jsem natvrdlej, ale prosím ješte o malou radu
mám takto dotaz: if (!($mista_i = mysql_db_query($nazev_databaze,"select tmp.emaily from (select email as emaily from table union all select email_2 as emaily from table union all select email_3 as emaily from table) tmp group by tmp.emaily having count(*)>1"))) { return 0 ; } while(($mi = mysql_fetch_array($mista_i))) { když dám echo $mi[emaily] nebo echo $mi[email_2] nic to nevypíše...:( jak si z toho dotazu vypíšu ten email? díky za pomoc.. |
||
nightfish Profil |
#8 · Zasláno: 6. 12. 2006, 18:58:44
while (($mi = mysql_fetch_row($mista_i))) {
echo $mi[0]; } |
||
MartinKloubek Profil |
#9 · Zasláno: 7. 12. 2006, 09:41:48
Tak to jsem zkoušel a také nic... :(
while (($mi = mysql_fetch_row($mista_i))) { echo $mi[0]; } Přitom dotaz se provede naskočí vše ale nemám naplněnou proměnnou error to neháže. vypíše mi to kompletní seznam. Ale já bych potřeboval abych si mohl ten seznam seřadit dle emailů proto potřebuji vypsat vždy ten text duplicitního emailu... |
||
Kajman_ Profil * |
#10 · Zasláno: 7. 12. 2006, 13:15:34
Nechápu, s čím máte problém. Píšete, že to nic nevypíše a také píšete, že to vypíše kompletní seznam.
Pokud to chcete seřadit, tak dejte na konec dotazu order by tmp.emaily a je to. No a pokud se divíte, že je to za sebou, tak si tam dejte nějakou html značku (br, li). |
||
Časová prodleva: 8 dní
|
|||
MartinKloubek Profil |
#11 · Zasláno: 15. 12. 2006, 17:35:59
už jsem problém našel moje chyba.
problém nebyl v tomto dotazu ale v následných řádkách díky za radu. |
||
Časová prodleva: 17 let
|
Toto téma je uzamčeno. Odpověď nelze zaslat.
0