04. november 2006 - 17:14Der er
18 kommentarer og 1 løsning
celle1, celle2 from tabel1 and celle3, celle4 from tabel 2
Hey..
Jeg er stødt på dette problem.. Jeg vil gerne lave et udtræk fra to tabeller i samme "udtrækning", da jeg skal bruge noget fra den første tabel, til at hente fra den anden tabel..
altså, det skal være noget lign: SELECT celle1, celle2 FROM tabel1 AND celle3 FROM tabel2 WHERE celle3 = celle1 AS SkalHentes WHERE SkalHentes != ''
Det virker måske nok lidt uoverskueligt, men det efter den første udtrækning (efter ..FROM tabel1) skal gå tilbage til den første, idet at det er her det egentlige skal udtrækkes..
Måske hvis du lige får linien her, kan det måske hjælpe.. problemet ligger måske også i, at jeg har en where indblandet.. altså, jeg har en where, som ikke er der, hvis man ikke har valgt noget oplysninger, men hvis man har kan der være op til 10 (where .. and .. and ..), afhængig af hvor mange oplysninger man vælger at skrive..
Men her er koden sådan mere eller mindre:
------------------------
if($_POST[profilbillede] == "Ja") { $where .= "ON a.brugernavn = b.brugernavn "; }else if($_POST[profilbillede] == "Nej") { $where .= "ON a.brugernavn != b.brugernavn "; } $where = "WHERE brugernavn != 'Sponto'"; if($_POST[fornavn] != "") { $where .= " AND fornavn LIKE '%$_POST[fornavn]%'"; } if($_POST[efternavn] != "") { $where .= " AND efternavn LIKE '%$_POST[efternavn]%'"; } if($_POST[brugernavn] != "") { $where .= " AND brugernavn LIKE '%$_POST[brugernavn]%'"; } if($_POST[civilstatus] != "Ligegyldigt") { $where .= " AND civilstatus = '%$_POST[civilstatus]%'"; } if($_POST[online] == "Ja") { $settime = time()-65; $where .= " AND settime > '$settime'"; } if($_POST[postnummer_start] != "" AND $_POST[postnummer_slut] != "") { $where .= " AND postnummer >= '$_POST[postnummer_start]' AND postnummer <= '$_POST[postnummer_slut]'"; } if($_POST[alder_start] != "" AND $_POST[alder_slut] != "") { $where .= " AND ((time() - mktime(0,0,0,foedselsdag_maaned,foedselsdag_dag,foedselsdag_aar))/31536000) >= '$_POST[alder_start]' AND (time() - mktime(0,0,0,foedselsdag_maaned,foedselsdag_dag,foedselsdag_aar))/31536000 <= '$_POST[alder_slut]'"; echo "lala"; }
$find_users = mysql_query("SELECT a.settime, a.brugernavn, a.fornavn, a.efternavn, a.postnummer, b.brugernavn FROM tabel1 AS a INNER JOIN tabel2 AS b $where ORDER by settime DESC")or die(mysql_error());
------------------------
en anden ting er så, at det med alderen ikke virker, hvilket du sikkert kan se ved at kigge på den..
Jeg kan nok gøre det endnu mere præciserende; det skal være sådan, at hvis nu $_POST[profilbillede] == "Ja" skal den vælge dem fra tabel1, som har en række i tabel2.. her skal det finde ved "brugernavn", som eksisterer i begge tabeller..
Det er lidt forvirrende kode. Gør det lige til en vane at indentere, så man kan læse koden. Du blander også PHP og SQL sammen i den sidste if, det går ikke. Koden jeg har lavet der, kræver min. MySQL v4.1.1 - Det kunne sikkert laves smartere, men kan ikke lige komme på hvordan.
Det lader til at du gemmer fødselsdato på en dum måde, nemlig et felt for dag, et for måned og et for år, og så blander du timestamps ind i det - det betyder at folk ikke kan være født før 1/1-1970 da det er dér unix timestamps starter...
Du selecter ikke profilbillede ud, selvom du joiner med den. Du henter endnu et brugernavn ud...
Du bruger $_POST[navn] hvor du skal bruge $_POST['navn'] - $_POST[navn] skal kun bruges inde i en "-streng...
Sidst men ikke mindst, så er det altid en god idé at skrive hvilken fejl du får!
if ($_POST['profilbillede'] == "Ja") { $sql .= " ,b.brugernavn AS billednavn FROM tabel1 AS a INNER JOIN tabel2 AS b ON a.brugernavn = b.brugernavn "; } else { $sql .= " FROM tabel1 AS a "; } $sql .= "WHERE a.brugernavn != 'Sponto'"; if ($_POST['fornavn'] != "") { $sql .= " AND a.fornavn LIKE '%$_POST[fornavn]%'"; } if ($_POST['efternavn'] != "") { $sql .= " AND a.efternavn LIKE '%$_POST[efternavn]%'"; } if ($_POST['brugernavn'] != "") { $sql .= " AND a.brugernavn LIKE '%$_POST[brugernavn]%'"; } if ($_POST['civilstatus'] != "Ligegyldigt") { $sql .= " AND a.civilstatus = '%$_POST[civilstatus]%'"; } if ($_POST['online'] == "Ja") { $settime = time()-65; $sql .= " AND a.settime > '$settime'"; } if ( $_POST['postnummer_start'] != "" && $_POST['postnummer_slut'] != "") { $sql .= " AND a.postnummer >= '$_POST[postnummer_start]' AND a.postnummer <= '$_POST[postnummer_slut]'"; } if ($_POST['alder_start'] != "" && $_POST['alder_slut'] != "") { $alder = "((UNIX_TIMESTAMP()-UNIX_TIMESTAMP(STR_TO_DATE(CONCAT(foedselsdag_aar,'/',foedselsdag_maaned,'/',foedselsdag_dag),'%Y/%m/%d')))/31536000)"; $sql .= " AND $alder BETWEEN '$_POST[alder_start]' AND '$_POST[alder_slut]'"; } $sql .= " ORDER by settime DESC";
Af en eller anden grund, så kommer den med fejlen, at der mangler at afslutte en { ( altså med en } ), når jeg bruger den du har skrevet der.. Hvad kan det evt. skyldes?
Jammen, det er kun når jeg indsætter din kode, altså erstatter den med min egen.. Og,, kan ikke se der skulle være nogen steder, hvor jeg mangler at afslutte..
Well, fejlen ser forkert ud. Men ja, som jeg skrev kræver min kode MySQL 4.1.1 eller nyere... Tror dog ikke at det der er den specifikke fejl - Den fejl du får er en fejl i PHP-koden, tror jeg.
Okey, det kan jeg egentlig også godt forstå.. Det er mig der ikke har haft overblik nok i min fil, og dermed ikke har kunnet se, at jeg manglede at afslutte en IF, et sted. Alt virker som det skal, takket være din hjælp. Tak! Nu mangler du bare at smide et svar.. (:
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.