08. august 2003 - 21:43Der er
10 kommentarer og 1 løsning
skal sammenholde to tabeller
Jeg har to tabeller, hvor jeg vil se om en given værdi af id, som findes i tabellen tilm, også findes i tabellen indsaet. Jeg har skrevet følgende, men der finder den en værdi for id som er i begge tabeller.Den skulle kun komme med et resultat hvis værdien af id ikke findes i tabellen indsaet men kun i tabellen tilm
$sql ="SELECT tilm.id FROM tilm LEFT JOIN indsaetON tilm.id=indsaet.id WHERE indsaet.id IS NULL"; //$query = mysql_query($sql) or die(mysql_error()); $sql="SELECT * FROM tilm where id=tilm.id"; $query = mysql_query($sql) or die(mysql_error()); while ($row = mysql_fetch_array($query)) {
I dette særtema ser vi på, hvordan cloud og AI bliver fundamentet for virksomhedernes digitale forretning, og hvordan de nye muligheder for automatisering og forretningsværdi kan udnyttes uden at miste overblik, sikkerhed og menneskelig kontrol.
for det første; Hvorfor har du //'et din første udførsel af din quary. for det andet; Du skriver: Vælg id fra tabellem tilm, link en tabel hvor id'erne er det samme, og vælg KUN dem hvor id'et fra den anden tabel er lig ingen ting. (Det vil altså betyde at de begge skal være lig med igen ting?
Jeg syntes det står en smule (læs: MEGET) uklart hvad det er du vil. Så hvis du vil have mig til at lave en SQL-kode til dig, bliver du nok lige nød til at give et eksempel..
Men kig evt på muligheden for flere krav i dit JOIN kald. Altså fx LEFT JOIN indsaet ON tilm.id = indsaet.id AND indsaet.id IS NULL (hvis det er det du vil ?!?) eller muligheden for at sige IKKE lig med.. Altså med en ! foran dit lig med. Fx. LEFT JOIN indsaet ON tilm.id != indsaet.id AND indsaet.id IS NULL
Og så til at slutte med, vil det nok være en RIGTIG god ide at dele den lidt op med nogle mellemrum. Her tænker jeg fx. på dit ON lige efter kollonne-navnet. Ikke så heldigt.
Men som sagt, jeg hjælper gerne, men forstår desværre ikke lige helt 100% hvad det er du vil ?!?
Godt. jeg har to tabeller hver indeholdende et felt der hedder id.
I den ene tabel er der to poster med hver sin id værdi. Jeg vil så se om der findes nogle poster i den anden tabel der har disse id værdier. Dvs hvis ikke skal den skrive en tekst, feks posten er slettet .
SÅ er den også som du allerede selv har forslået.. Du skal bare have sat et mellemrum ind efter indsaet og før ON.. Så der kommer til at stå:
SELECT tilm.id FROM tilm LEFT JOIN indsaet ON tilm.id=indsaet.id WHERE indsaet.id IS NULL
Den burde gerne udskrive alle poster i tilm som har et id som ikke optræder i indsaet. Forstår så stadig ikke helt hvilken af tabellerne de fleste data ligger i. Men det er jo så bare at bytte rundt på tabelnavnene.. ;D
Den skriver bare alle de poster ud som ligger i tabellen tilm
Jeg bruger følgende kode :
$sql ="SELECT tilm.id, indsaet.id FROM tilm LEFT JOIN indsaet ON tilm.id != indsaet.id is null"; $query = mysql_query($sql) or die(mysql_error()); while ($row = mysql_fetch_array($query)) { echo "
ja.. også derfor jeg spurgte hvorfor du skrev to sql-sætninger ?!? Den anden spytter resultatet ud med det samme. Altså:
$sql="SELECT tilm.id FROM tilm LEFT JOIN indsaet ON tilm.id=indsaet.id WHERE indsaet.id IS NULL"; $query = mysql_query($sql) or die(mysql_error()); $print = 'Poster der KUN findes i tabellen tilm:<br><br> '; while ($row = mysql_fetch_array($query)) { $print .= $row['id'] . ' '; } echo $print;
Det du har skrevet i din sidste kommentar er noget vrøvl. Du bruger for det første slet ikke den sql vi udledte før, og i den du har skrevet til sidst tager du alle poster. Da du kun har en tabel includeret i dit udtræk er det jo lige meget om du sætter tabel-navnet foran de forskellige kollonnenavne. Så det du skriver er:
Vælg alt data fra tabellen tilm hvor id'et på posten er lig id'et på posten. Og da du jo tjekker for HVER post vil det sige at du skrive WHERE 1 = 1, WHERE 2 = 2 osv. Og det vil jo altid være sandt. Derfor alle dataene kommer.
Hvis du absolut VIL have to gange sql-sætninger, skal du hente id'et fra den første ud lgie som du gør i din sidste kommentar (bare med den lange sql-sætning), og herefter søge på dette id i din næste sql-sætning så der kommer til at stå: $sql = "SELECT * FROM tilm where id = $IdFraForrigeUdtraek";
Er dog kun unødvendigt og sløvende for dit script. Så undlad den, og skriv i stedet bare som jeg skrev i linie 4 i denne kommentar :D
/Nicklas B.
Synes godt om
Ny brugerNybegynder
Din løsning...
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.