Avatar billede madsens90 Praktikant
30. januar 2008 - 17:16 Der er 17 kommentarer og
1 løsning

Tjek i databasen om en række findes i den ene tabel, og hvis så:

Er ved at lave sådan at man kan stemme på profilbilleder på min hjemmeside..

Og så vil jeg lave sådan at hvis man har stemt på et billede, skal billedet ikke komme frem igen, så man kan stemme på det..

Så først skal den hente stien med mere til alle profilbilleder i den ene tabel i min database.. Men hvis der findes en række i en anden tabel, som indeholder samme sti på billedet, så skal den finde et billede hvor der ikke er.

Nogen der kan lave dette?

Har indtil videre en connection til at finde alle billederne i den ene tabel, som skal bruges, som ser sådan ud:

$sql = "SELECT * FROM galleri WHERE mig = '1' ORDER BY RAND() LIMIT 1";
$result = mysql_query($sql);   
while($r = mysql_fetch_array($result)){ }

Så mangler bare at den tjekker om den som den har fundet random i tabellen, og den har samme information som i en anden tabel.
Avatar billede madsens90 Praktikant
30. januar 2008 - 17:20 #1
Jeg har også lavet sådan at hvis man allerede har stemt på billedet, så kommer den frem og siger at man skal opdaterer siden for at finde et billede man ikke har stemt på.. Hvilket er ret steneren..
Avatar billede jensgram Nybegynder
30. januar 2008 - 17:52 #2
Bare et bud for at give dig en idé til en mulig løsning - ellers må du poste mere af DB-strukturen:

SELECT g.* FROM galleri AS g, sete_billeder AS x WHERE g.mig = '1' AND g.sti <> x.sti ORDER BY RAND() LIMIT 1
Avatar billede madsens90 Praktikant
30. januar 2008 - 18:04 #3
Hvad står g. for?
Avatar billede madsens90 Praktikant
30. januar 2008 - 18:27 #4
Kan du evt. forklarer den linie der? :)

Ville jeg være super glad for. :)
Avatar billede jensgram Nybegynder
30. januar 2008 - 19:10 #5
Hov - det går heller ikke. Prøv denne

SELECT
  *
FROM
  galleri
WHERE
  mig = '1'
    AND
  sti NOT IN
    SELECT sti from x WHERE mig = '1' // Nu ved jeg ikke lige hvad din "anden tabel" hedder.
ORDER BY RAND()
LIMIT 1
Avatar billede madsens90 Praktikant
30. januar 2008 - 19:37 #6
Tusinde mange gange tak.. :D

Det er jeg da sikker på det virker det der. ;)

Tester det lige lidt senere, og så kommer jeg med en tilbage melding. :)
Avatar billede madsens90 Praktikant
30. januar 2008 - 21:08 #7
Burde jeg ikke kunne bruge denne:

$sql = "SELECT DISTINCT * FROM galleri WHERE mig = '1' AND sti NOT IN SELECT sti from hotornot ORDER BY RAND() LIMIT 1";

?
Avatar billede jensgram Nybegynder
30. januar 2008 - 21:13 #8
Det kan forresten godt være, at der skal en gang ( ) om IN:

$sql = "SELECT DISTINCT * FROM galleri WHERE mig = '1' AND sti NOT IN (SELECT sti from hotornot) ORDER BY RAND() LIMIT 1";

... men skal du ikke have en WHERE på den indre SELECT?
Avatar billede madsens90 Praktikant
30. januar 2008 - 21:31 #9
Jo.. men hvorn tager jeg en WHERE på den indre select, hvor den skal tage samme STI som den fandt i 'galleri', og så skal den tage navn = '$brugernavn' også..

Hvilket vel er noget lign det her:

NOT IN (SELECT sti from hotornot WHERE sti = sti AND navn = '$brugernavn')

Eller hvad?
Avatar billede madsens90 Praktikant
30. januar 2008 - 22:10 #10
Her er den færdige string som jeg prøver at få til at virke:

$sql = "SELECT DISTINCT * FROM galleri WHERE mig = '1' AND sti NOT IN (SELECT * from hotornot WHERE navn = '$navn' AND billedenavn = sti AND navnpaabruger = bruger) ORDER BY RAND() LIMIT 1";

billedenavn i den indre celect, er det samme som stien på billedet i den anden.

navnpaabruger i den indre select skal også tjekke om bruger er = det samme som i den anden select.
Avatar billede madsens90 Praktikant
30. januar 2008 - 22:18 #11
Der hvor jeg skriver:

Billedenavn = sti

&

navnpaabruger = bruger

Hvordan for jeg da

sti til at være = sti hentet fra den ydre select

&

bruger til at være = bruger hentet fra den ydre select? Hvis du forstår?
Avatar billede jensgram Nybegynder
31. januar 2008 - 08:32 #12
Ok - men felterne hedder det samme? Et bud:

$sql = "SELECT DISTINCT * FROM galleri WHERE mig = '1' AND sti NOT IN (SELECT * from hotornot WHERE navn = '$navn' AND hotornot.sti = galleri.sti AND horornot.bruger = galleri.bruger) ORDER BY RAND() LIMIT 1";

Det er dog utestet og jeg er ikke sikker på, at det er gyldig SQL :(
Avatar billede madsens90 Praktikant
31. januar 2008 - 08:52 #13
Har prøvet at gøre det sådan:

$sql = "SELECT * FROM galleri WHERE mig = '1' AND sti NOT IN (SELECT * FROM hotornot WHERE navn = '$navn' AND hotornot.billedenavn = galleri.sti AND hotornot.navnpaabruger = galleri.bruger) ORDER BY RAND() LIMIT 1";

Men det virker desværre ikke.. :/

navnpaabruger er det samme i 'hotornot', som 'bruger' er i galleri.

og det samme med billedenavn i 'hotornot', og sti i galleri.
Avatar billede jensgram Nybegynder
31. januar 2008 - 09:27 #14
Får du nogen fejl?

Jeg kan ikke lige gennemskue hvad der kan være galt...
Avatar billede madsens90 Praktikant
31. januar 2008 - 11:17 #15
Jah.. Den siger fejl til det. :/

Og den ser sådan her ud lige nu:

$sql = "SELECT * FROM galleri WHERE mig = '1' AND sti NOT IN (SELECT * FROM hotornot WHERE hotornot.navn = '$navn' AND hotornot.billedenavn = galleri.sti AND hotornot.navnpaabruger = galleri.bruger) ORDER BY RAND() LIMIT 1";

Håber du evt. kan se fejlen. :/
Avatar billede rosvall Nybegynder
31. januar 2008 - 19:31 #16
Jeg kender ikke til brugen af IN/NOT IN, men kunne det, at din subselect returnerer flere kolonner, ikke lave noget ballade?
Avatar billede madsens90 Praktikant
31. januar 2008 - 20:04 #17
Så du mener at jeg evt. skal angive hvilke rækker jeg vil hente fra min db?

Eller? :/
Avatar billede madsens90 Praktikant
29. november 2010 - 18:48 #18
Har haft SQL i skolen, så lukker her. :D hehe
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