Avatar billede overgreat Forsker
22. juli 2006 - 21:44 Der er 30 kommentarer og
1 løsning

Udelukke rækker i udtræ hvor $id=$navnid(to forskellige tabeller)

Jeg har lavet et udtræk fra en navne database....

Samtidigt har jeg en yderligere tabel ved navn:

bestyrelse_medlemmer
id
navnid
bpost

Hvordan laver nedenstående udtræk, men hvor navnid (bestyrelse_medlemmer) ikke er lig id (navne_basis)?



----
if ($opretmedlem==se){
include("config.php");
$db = mysql_connect($server, $user, $pass);
mysql_select_db($database, $db);

$foresp = mysql_query("SELECT id, fornavn, efternavn, adresse, postnr, `by`, tlf, mobil, billede, email FROM navne_basis ORDER BY fornavn ");

while ($data = mysql_fetch_row($foresp)){

echo '<tr>';
echo '<td><center><a href="bestadmin.php?opretmedlemnu=se&id=' . $data[0] . '" class="info">' . $data[1] . ' ' . $data[2] . '<br>' . $data[3] . '<br>' . $data[4] . ' ' . $data[5] . '</center></a></td>';
echo '<td><center><a href="bestadmin.php?opretmedlemnu=se&id=' . $data[0] . '" class="info">' . $data[6] . '<br>' . $data[7] . '<br>' . $data[9] . '</center></a></td>';
echo '<td><center><a href="bestadmin.php?opretmedlemnu=se&id=' . $data[0] .'"><img src="personbilleder/' . $data[8] . '" width="45" valign="top" border="0"></a></center></td>';
echo '</tr>';
        }
        }   
----------
Avatar billede jaw Nybegynder
22. juli 2006 - 21:47 #1
$foresp = mysql_query("SELECT navne_basis.id, navne_basis.fornavn, navne_basis.efternavn, navne_basis.adresse, navne_basis.postnr, `navne_basis.by`, navne_basis.tlf, navne_basis.mobil, navne_basis.billede, navne_basis.email FROM navne_basis, bestyrelse_medlemmer WHERE bestyrelse_medlemmer.id != navne_basis.id ORDER BY fornavn ");

Men kan ikke lige helt forstå det, for du bruger jo ikke data fra bestyrelse_medlemmer?
Avatar billede overgreat Forsker
22. juli 2006 - 21:49 #2
Det er så jeg sikrer at personen ikke kommer til at blive tilmeldt bestyrelsen to gange!

Jeg afprøver lige hjælpen
Avatar billede overgreat Forsker
22. juli 2006 - 21:58 #3
Jeg har en person med navne_basis.id = 5
Han står ikke i bestyrelse_medlemmer.navnid....

Men han kommer alligevel ikke frem?

Kan i hjælpe?

$foresp = mysql_query("SELECT navne_basis.id, navne_basis.fornavn, navne_basis.efternavn, navne_basis.adresse, navne_basis.postnr, `navne_basis.by`, navne_basis.tlf, navne_basis.mobil, navne_basis.billede, navne_basis.email FROM navne_basis, bestyrelse_medlemmer WHERE bestyrelse_medlemmer.navnid != navne_basis.id ORDER BY navne_basis.fornavn ");
Avatar billede overgreat Forsker
22. juli 2006 - 22:00 #4
er det fordi der skal rettes i echoen?
Avatar billede jaw Nybegynder
22. juli 2006 - 22:05 #5
Måske jeg begynder at forstå hvad du vil. Jeg vil ikke garantere at den her virker, men prøv den lige, og paste evt. fejlmeddelelser:

$foresp = mysql_query("SELECT COUNT(bestyrelse_medlemmer.id) as num, navne_basis.id, navne_basis.fornavn, navne_basis.efternavn, navne_basis.adresse, navne_basis.postnr, `navne_basis.by`, navne_basis.tlf, navne_basis.mobil, navne_basis.billede, navne_basis.email FROM navne_basis LEFT JOIN bestyrelse_medlemmer ON bestyrelse_medlemmer.navne_id = navne_basis.id HAVING num > 0 ORDER BY navne_basis.fornavn ") or die(mysql_error());
Avatar billede jaw Nybegynder
22. juli 2006 - 22:05 #6
HAVING num > 0
skal vist være
HAVING num = 0
Avatar billede jaw Nybegynder
22. juli 2006 - 22:06 #7
måske endda:
HAVING COUNT(bestyrelse_medlemmer.id) = 0
- synes at errindre, at der er noget med HAVING i den stil...
Avatar billede nielle Nybegynder
22. juli 2006 - 22:08 #8
Et bud:

SELECT id, fornavn, efternavn, adresse, postnr, `by`, tlf, mobil, billede, email
FROM navne_basis
WHERE id NOT IN (SELECT navnid AS id FROM bestyrelse_medlemmer)
ORDER BY fornavn
Avatar billede overgreat Forsker
22. juli 2006 - 22:11 #9
Fejlmeddelse:
Mixing of GROUP columns (MIN(),MAX(),COUNT()...) with no GROUP columns is illegal if there is no GROUP BY clause

--------------
$foresp = mysql_query("SELECT COUNT(bestyrelse_medlemmer.id) as num, navne_basis.id, navne_basis.fornavn, navne_basis.efternavn, navne_basis.adresse, navne_basis.postnr, navne_basis.by, navne_basis.tlf, navne_basis.mobil, navne_basis.billede, navne_basis.email FROM navne_basis LEFT JOIN bestyrelse_medlemmer ON bestyrelse_medlemmer.navnid = navne_basis.id HAVING num > 0 ORDER BY navne_basis.fornavn ") or die(mysql_error());
Avatar billede jaw Nybegynder
22. juli 2006 - 22:13 #10
$foresp = mysql_query("SELECT COUNT(bestyrelse_medlemmer.id) as num, navne_basis.id, navne_basis.fornavn, navne_basis.efternavn, navne_basis.adresse, navne_basis.postnr, navne_basis.by, navne_basis.tlf, navne_basis.mobil, navne_basis.billede, navne_basis.email FROM navne_basis LEFT JOIN bestyrelse_medlemmer ON bestyrelse_medlemmer.navnid = navne_basis.id HAVING num > 0 GROUP BY navne_basis.id ORDER BY navne_basis.fornavn ") or die(mysql_error());
Avatar billede jaw Nybegynder
22. juli 2006 - 22:14 #11
Doh, Nielle's er noget mere smidig - omend jeg stadig tror min vil virke på et tidspunkt :) Jeg ser vist ikke helt klart idag...
Avatar billede overgreat Forsker
22. juli 2006 - 22:46 #12
Juhuu det lykkedes.......

$foresp = mysql_query("SELECT navne_basis.id, navne_basis.fornavn, navne_basis.efternavn, navne_basis.adresse, navne_basis.postnr, navne_basis.by, navne_basis.tlf, navne_basis.mobil, navne_basis.billede, navne_basis.email, bestyrelse_medlemmer.navnid
FROM navne_basis, bestyrelse_medlemmer
WHERE navne_basis.id != bestyrelse_medlemmer.navnid 
ORDER BY navne_basis.fornavn ") or die(mysql_error());

Giver i begge et svar... tak for hjælpen!
Avatar billede nielle Nybegynder
22. juli 2006 - 22:51 #13
Hmmm, er du sikker på at den virker? Jeg synes at den ser forkert ud.
Avatar billede overgreat Forsker
22. juli 2006 - 23:01 #14
det virker fint... hvad ser du der undrer!?
Avatar billede nielle Nybegynder
22. juli 2006 - 23:09 #15
Det er svært at forkalre uden at man kan tegne og fortælle.

Men basalt set burde du få en alle rækker i bestyrelse_medlemmer kombineret med alle rækker i bestyrelse_medlemmer - pånær den ene kombination hvor

navne_basis.id = bestyrelse_medlemmer.navnid

Der burde altås opstå en masse dubletter, og falske resultater.

Må jeg spørge hvor mange rækker du pt. har i din bestyrelse_medlemmer-tabel?
Avatar billede overgreat Forsker
22. juli 2006 - 23:48 #16
2 stk
Avatar billede nielle Nybegynder
23. juli 2006 - 00:04 #17
Og det får du ikke noget underligt resultat ud af?
Avatar billede jaw Nybegynder
23. juli 2006 - 00:23 #18
Kør den evt. i phpMyAdmin og se resultatet, jeg vil mene den funker. Men måske ikke den "klogeste".
Avatar billede overgreat Forsker
23. juli 2006 - 00:25 #19
I har ret... den går helt galt.
Avatar billede nielle Nybegynder
23. juli 2006 - 00:27 #20
Det mente jeg jo nok. Prøv så med den fra:

22/07-2006 22:08:47
Avatar billede overgreat Forsker
23. juli 2006 - 00:27 #21
Følgende fejl får jeg:

You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near 'SELECT navnid AS id FROM bestyrelse_medlemmer) ORDER BY fornav

hvis jeg skriver følgende:

include("config.php");
        $db = mysql_connect($server, $user, $pass);
        mysql_select_db($database, $db);
$foresp = mysql_query("SELECT id, fornavn, efternavn, adresse, postnr, `by`, tlf, mobil, billede, email
FROM navne_basis
WHERE id NOT IN (SELECT navnid AS id FROM bestyrelse_medlemmer)
ORDER BY fornavn ") or die(mysql_error());
Avatar billede jaw Nybegynder
23. juli 2006 - 00:31 #22
Hvad sker der egentlig når du prøver min 22:13:09 - bare af ren nysgeerrighed...?
Avatar billede nielle Nybegynder
23. juli 2006 - 00:35 #23
Hmmm, jeg tror at du har en gammel MySQL installation som ikke forstår sig på sub-SELECT's :^|
Avatar billede overgreat Forsker
23. juli 2006 - 00:37 #24
Så kommer følgende:

You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near 'GROUP BY navne_basis.id ORDER BY navne_basis.fornavn' at line 1
Avatar billede overgreat Forsker
23. juli 2006 - 00:38 #25
Det ligger på surftowns webhotel
Avatar billede nielle Nybegynder
23. juli 2006 - 00:42 #26
Jeg vil kigge på det i morgen men der bliver så en løsning med noget LEFT JOIN.
Avatar billede jaw Nybegynder
23. juli 2006 - 00:42 #27
Tror du skal bytte om på GROUP BY og HAVING. Og jeg vil gå i seng. Natter begge to !
Avatar billede overgreat Forsker
23. juli 2006 - 08:35 #28
hej jaw

Det virkede!!!!! 00:42:52

Sender du et svar.

løsningen:

$foresp = mysql_query("SELECT COUNT(bestyrelse_medlemmer.id) as num, navne_basis.id, navne_basis.fornavn, navne_basis.efternavn, navne_basis.adresse, navne_basis.postnr, navne_basis.by, navne_basis.tlf, navne_basis.mobil, navne_basis.billede, navne_basis.email FROM navne_basis LEFT JOIN bestyrelse_medlemmer ON bestyrelse_medlemmer.navnid = navne_basis.id GROUP BY navne_basis.id HAVING num = 0  ORDER BY navne_basis.fornavn ") or die(mysql_error());
Avatar billede nielle Nybegynder
23. juli 2006 - 10:12 #29
Denne her burde også:

SELECT id, fornavn, efternavn, adresse, postnr, `by`, tlf, mobil, billede, email
FROM navne_basis LEFT JOIN bestyrelse_medlemmer
WHERE bestyrelse_medlemmer.navnid IS NULL
ORDER BY fornavn
Avatar billede nielle Nybegynder
23. juli 2006 - 10:14 #30
Ups. Sådan:

SELECT id, fornavn, efternavn, adresse, postnr, `by`, tlf, mobil, billede, email
FROM navne_basis LEFT JOIN bestyrelse_medlemmer ON navne_basis.id = bestyrelse_medlemmer.navnid
WHERE bestyrelse_medlemmer.navnid IS NULL
ORDER BY fornavn
Avatar billede jaw Nybegynder
23. juli 2006 - 10:57 #31
Ja, den er nok heller ikke tosset, lidt simplere måske.

Anyhoo, så bestemmer du jo selv hvilken du vil bruge, Overgreat. Jeg smider et svar, så er resten op til dig :)
Avatar billede Ny bruger Nybegynder

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.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester