Avatar billede dark_unicorn Nybegynder
02. november 2007 - 01:04 Der er 4 kommentarer

en phpside til udtræk af flere tabeller "onload"

Jeg vil gerne have lidt  hjælp til en php side der kan udføre følgende forepsørgsel:

SELECT *
FROM `tabel1`
WHERE `tabel1`.`id` = X
ORDER BY `tabel1`.`id` ASC
LIMIT 0 , 30

Og hente et brugernavn fra en anden tabel og sammensætte med id nummeret.

X skal indtastes manuelt og er den kørsel der skal bearbejdes (eksempelvis, en afstemning hvor jeg vil vide hvem der har stemt vil X være afstemningens ID)

Helt optimalt bliver det hvis der kan vælges en tilfældig bruger / id der også bliver vist, hvis der skal findes en (eller flere) tilfældig vinder(e)

Lige nu bliver jeg nødt til at gøre det i hånden i phpMyAdmin og sammenholde 2 tabeller. En forholdsvis tidskrævende opgave, som jeg gerne vil automatisere.

Så vidt jeg husker er det ikke voldsomt kompliceret (når vi ser bort fra at layoute resultatet)
Avatar billede coderdk Praktikant
02. november 2007 - 01:59 #1
http://www.w3schools.com/sql/sql_join.asp

;) Eksempel:

SELECT * FROM tabel1 AS t1 INNER JOIN tabel2 AS t2 ON t1.id = t2.id ORDER BY t1.id LIMIT 30

Her er tabel1 bundet sammen med tabel2 på feltet "id" som er i begge tabeller.

Tilfældig:

SELECT * FROM tabel1 AS t1 INNER JOIN tabel2 AS t2 ON t1.id = t2.id ORDER BY RAND() LIMIT 1

Altså med ORDER BY RAND() og så en LIMIT med hvor mange tilfældige du vil have...
Avatar billede dark_unicorn Nybegynder
02. november 2007 - 10:53 #2
SELECT * FROM tabel1 AS t1 INNER JOIN tabel2 AS t2 ON t1.id = t2.id ORDER BY t1.id LIMIT 30

På den får jeg en liste med alle oplysninger om 30 af de der stemmer, men med flere gengangere (hvilket systemet forhindrer) - men der er jo heller ikke  noget der definerer afstemnings id'et f.eks.

Jeg får også en masse information jeg ikke har brug for (f.eks. brugerens kodeord kodet i md5, og alle andre oplysninger der ligger i tabel1 (som definerer dem de rhar stemt i det her tilfælde) og tabel 2 (der har alle bruger informationerne)
Det er kun feltet username jeg har brug for fra tabel2 ("users") og id nummeret fra tabel1 ("voters") og kun for en enkelt afstemning ad gangen ("vote_id" som gentages for hver "vote_user_id" der har stemt i den pågældende afstemning)


Fra det link du har smidt har jeg bikset følgende sammen (men er ikke sikker på hvad jeg skal efter det jeg har skrevet)

SELECT voters.vote_user_id, users.username
FROM vote_voters, users
WHERE vote_voters.vote_user_id=users.user_id

Det er jeg (rimelig) sikker på, men jeg har en ide om at der skal noget AND ind for at definere hvilken vote_id der skal findes for, og så selvfølgelig en ORDER BY voters.vote_user_id ASC LIMIT 0,30 (det er det phpmyadmin smider efter når der er mulighed for flere sider, men er det det rigtige at have med?)
Avatar billede coderdk Praktikant
02. november 2007 - 11:18 #3
Den måde du har skrevet det på, er en alternativ måde at skrive joins på, jeg foretrækker den "beskrivende" måde:

SELECT DISTINCTROW v.vote_user_id, u.username
FROM vote_voters AS v
INNER JOIN users AS u ON v.vote_user_id = u.user_id

Måske?
Avatar billede dark_unicorn Nybegynder
03. november 2007 - 12:46 #4
Den får jeg absolut ingenting ud af at køre, andet end at forsiden i phpmyadmin opdaterer og den står i sql historikken.

Men jeg har fået udbygget den jeg selv skrev til

SELECT voters.vote_user_id, users.username
FROM vote_voters, users
WHERE vote_voters.vote_user_id=users.user_id
AND vote_voters.vote_id=X
ORDER BY vote_voters.vote_user_id ASC
LIMIT 0,30

Så har jeg kun udtrækket fra den afstemning jeg vil have (X). Men hvordan skriver jeg det ind i en phpkode så jeg kan lave en udtrak.php (eks) fil hvor jeg vælger X på siden og trykker "udfør" (e.l.) og får udtrækket op. Hmm..
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