404 Posted June 29, 2009 Report Share Posted June 29, 2009 (edited) Ir vajadzība ar 1 kveriju nolasīt no divām pēc struktūras identiskām tabulām visus datus tā,lai tos varētu ielasīt pēc tam 2 masīvos(katras tabulas datus savā). Vienā masīvā to ielasu šādi: $dati=mysql_fetch_array(mysql_query("SELECT * FROM chati,forumi WHERE chati.owner='".$uid."' AND forumi.owner='".$uid."'"))) Bet vajadzētu,lai $dati masīvu atgrieztu 2 elementos katru tabulu savā: $dati[0] // chati $dati[1] // forumi Ierakstu saskaitīšanai katrai atsevišķi uzrakstīju šādi: $cik=mysql_fetch_array(mysql_query("SELECT(SELECT COUNT(*) FROM chati WHERE owner='".$uid."') AS ch,(SELECT COUNT(*) FROM forumi WHERE owner='".$uid."') AS fr "))) Tas strādā.Līdzīgi mēģināju ar selectu,bet šādi vairs negāja cauri: $dati=mysql_fetch_array(mysql_query("SELECT(SELECT * FROM chati WHERE owner='".$uid."') AS ch,(SELECT * FROM forumi WHERE owner='".$uid."') AS fr "))) Saņēmu erroru: Operand should contain 1 column(s) Vēl mēģināju arī šādu variantu: $dati=mysql_fetch_array(mysql_query("SELECT * FROM chati JOIN forumi ON (chati.owner='".$uid."' AND forumi.owner='".$uid."') "))) Strādā,un arī ielasa visu masīvā kā vajag.Bet kā mēģinu to sadalīt ar AS,tā ir errors: $dati=mysql_fetch_array(mysql_query("SELECT * FROM chati AS ch JOIN forumi As fr ON (chati.owner='".$uid."' AND forumi.owner='".$uid."') "))) Paziņo: Unknown column 'chati.owner' in 'on clause' Ja pareizi saprotu,owner lauks šādā pierakstā pirmajā tabulā netiek nemaz atrasts. Mēģināju vēl šādi,bet tas vispār izrādījās vēl aplamāk: $dati=mysql_fetch_array(mysql_query("SELECT * FROM chati AS ch ON (chati.owner='".$uid."') JOIN forumi As fr ON (forumi.owner='".$uid."') "))) Kā to būtu iespējams panākt pareizi? Edited June 29, 2009 by 404 Quote Link to comment Share on other sites More sharing options...
Aleksejs Posted June 29, 2009 Report Share Posted June 29, 2009 Nezinu, kā ir uzreiz divos masīvos, bet parasti to dara kaut kā šādi (ja pieņemam, ka kolonnu skaits un tipi un nosaukumi abās tabulās vienādi): SELECT * FROM chati WHERE chati.owner=$uid UNION SELECT * FROM forumi WHERE forumi.owner=$uid Ja vajag atšķirt, kurš ir kurš, tad var pielikt vēl vienu kolonnu: SELECT 1, * FROM chati WHERE chati.owner=$uid UNION SELECT 2, * FROM forumi WHERE forumi.owner=$uid Tagad visiem čatiem nulltais indekss būs == 1 un forumiem == 2. Bet kāpēc vajag stingri ar vienu vaicājumu? Manuprāt, katram savs vaicājums būtu bijis labāk. Quote Link to comment Share on other sites More sharing options...
cucumber Posted June 29, 2009 Report Share Posted June 29, 2009 (edited) SELECT (SELECT * FROM `chati` WHERE `owner`='".$uid."') as chats, (SELECT * FROM `forumi` WHERE `owner`='".$uid."') AS formums //4zh risinajums bet vajdzetu stradat $dati=mysql_fetch_array(mysql_query("SELECT * FROM chati AS ch JOIN forumi As fr ON (ch.owner='".$uid."' AND fr.owner='".$uid."') "))) Edited June 29, 2009 by cucumber Quote Link to comment Share on other sites More sharing options...
404 Posted June 29, 2009 Author Report Share Posted June 29, 2009 (edited) Cucumber variantu: SELECT (SELECT * FROM `chati` WHERE `owner`='".$uid."') as chats, (SELECT * FROM `forumi` WHERE `owner`='".$uid."') AS formums //4zh risinajums bet vajdzetu stradat jau biju izmēģinājis-tas atgriež erroru: Operand should contain 1 column(s),lai gan ja ir skaitīšanas SELECT(*),tad kļūdu nemeta. Par variantu selektot katru tabulu atsevišķi-tā arī pirmajā variantā sākotnēji bija.Tā vēlme taisīt vienā radās dēļ uzskata,ka vienam saliktajam pieprasījumam vajadzētu būt ātrākam par 2 atsevišķiem kverijiem.Kā tur ar īsti ir,pašam grūti spriest.Ir lasīti arī pilnīgi pretēji viedokļi. Alekseja variants ar UNION : SELECT 1, * FROM chati WHERE chati.owner=$uid UNION SELECT 2, * FROM forumi WHERE forumi.owner=$uid ar izskatās tieši tas kas vajadzīgs,jo tieši nodalīt katras tabulas datus lai masīvā atšķirtu kuri dati no kuras tabulas,arī bija vēlme.Tik īsti nepieleca,kā uzstādīt to atšķirību. SELECT 1 tas ir domāts,ka tas cipars 1 ir papildus jauna kolona ar nosaukumu 1 vai kādu savu? Tad pieraksts: SELECT 1, * man izraisa erroru. Edited June 29, 2009 by 404 Quote Link to comment Share on other sites More sharing options...
bubu Posted June 29, 2009 Report Share Posted June 29, 2009 SELECT 1, * ... nozīmē, ka rezultāta datos pirmā kolonnā tiks atgriezsts skaitlis 1 (visiem ierakstiem) Ja nepatīk skaitļi, lieto stringus: SELECT "chati", * FROM chati WHERE ... UNION SELECT "forumi", * FROM forumi WHERE ... Quote Link to comment Share on other sites More sharing options...
404 Posted June 29, 2009 Author Report Share Posted June 29, 2009 Izmēģinājos visādi,bet bez kļūdas strādā tikai šādi: $sql=mysql_query("SELECT * FROM chati WHERE chati.owner='".$uid."' UNION SELECT * FROM forumi WHERE forumi.owner='".$uid."'")) Kā priekšā pielieku skaitli: $sql=mysql_query("SELECT 1,* FROM chati WHERE chati.owner='".$uid."' UNION SELECT 2,* FROM forumi WHERE forumi.owner='".$uid."'")) SELECT 1,* vai kaut stringu: SELECT "chati",* tas uzreiz izraisa sintakses kļūdas paziņojumu: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version Mysql versija man ir 5.0.45 Sanāk,ka vai nu neesmu joprojām sapratis sintaksi,vai arī šī versija neņem tāda tipa pierakstu? ;D Quote Link to comment Share on other sites More sharing options...
Aleksejs Posted June 29, 2009 Report Share Posted June 29, 2009 Varbūt šādi: SELECT 1 AS KasTasIr, * FROM chati WHERE chati.owner=$uid UNION SELECT 2 AS KasTasIr, * FROM forumi WHERE forumi.owner=$uid Vai arī iespējams, ka MySQL nepatīk *, gadījumos, kad esi radījis mākslīgu kolonnu: SELECT 1 AS KasTasIr, lauks1, lauks2,...,lauksN FROM chati WHERE chati.owner=$uid UNION SELECT 2 AS KasTasIr, lauks1, lauks2,...,lauksN FROM forumi WHERE forumi.owner=$uid Quote Link to comment Share on other sites More sharing options...
404 Posted June 30, 2009 Author Report Share Posted June 30, 2009 Hmm,tiešām uzdodot izvilkt nevis * visas kolonnas,bet tikai noteiktas,viss smuki strādā,bez errora.Vispār jau pāris tajās tabulās bija caur myadmin papildus manuāli pievienotas.Tad laikam sanāk,ka tas arī bija kļūdas cēlonis. Bet visas atlasīt arī izskatās nemaz nevajadzēs.Šāda tipa ļoti labi pašlaik der: $sql=mysql_query("SELECT 1 AS data, id,chatname,admin FROM chati WHERE chati.owner='".$uid."' UNION SELECT 2 AS data, id,forumname,admin FROM forumi WHERE forumi.owner='".$uid."' "); Liels paldies,šis noteikti noderēs arī turpmāk :) Quote Link to comment Share on other sites More sharing options...
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.