24. oktober 2003 - 18:43Der er
83 kommentarer og 1 løsning
Har problemer med en query
Hej
Nogle der kan hjælpe mig med denne mysql_query ?
$result=mysql_query("SELECT scooter_vote.*, scooter.*, WHERE scooter_vote.scooter_id=scooter.id AND scooter_vote.bruger_id='$bruger' GROUP BY scooter.id ORDER BY RAND() LIMIT 1") or die (mysql_error()); if(mysql_num_rows($result) > 0) { echo 'Du har slemt på alle scooterne!'; } else { while($row=mysql_fetch_assoc($result)) { $resultat = mysql_query("SELECT URL FROM scooter_billeder WHERE scooter_id = '$row[id]' LIMIT 1") or die (mysql_error()); $rowpic = mysql_fetch_array($resultat); echo '<img src="'.$rowpic['URL'].'">'; } }
Jeg får denne fejl: You have an error in your SQL syntax near 'WHERE scooter_vote.scooter_id=scooter.id AND scooter_vote.bruger_id='1' GROUP BY' at line 1
Støv, fibre og metalliske partikler kan påvirke både uptime, levetid og driftssikkerhed. Derfor arbejder flere datacentre systematisk med contamination control.
Nu får jeg denne fejl: You have an error in your SQL syntax near 'FROM scooter_vote, scooter WHERE scooter_vote.scooter_id=scooter.id AND scooter_' at line 1
$result=mysql_query("SELECT FROM scooter_vote, scooter WHERE scooter_vote.scooter_id=scooter.id AND scooter_vote.bruger_id='$bruger' GROUP BY scooter.id ORDER BY RAND() LIMIT 1") or die (mysql_error()); if(mysql_num_rows($result) > 0) { echo 'Du har slemt på alle scooterne!'; } else { while($row=mysql_fetch_assoc($result)) { $resultat = mysql_query("SELECT URL FROM scooter_billeder WHERE scooter_id = '$row[id]' LIMIT 1") or die (mysql_error()); $rowpic = mysql_fetch_array($resultat); echo '<img src="'.$rowpic['URL'].'">'; } }
if($_POST['vote']) { mysql_query("INSERT INTO scooter_vote (scooter_id,bruger_id,vote) VALUES ('$id','1','$_POST[vote]')") or die (mysql_error()); echo "<script>window.location='hotornot.php'</script>"; }
Jeg skal have en mysql_query som udskriver id i table scooter men kun hvis $bruger ikke findes i feltet bruger_id i table scooter_vote...
Jeg har prøvet med denne men den dur ikke :(
$result=mysql_query("SELECT * FROM scooter_vote,scooter WHERE scooter_vote.bruger_id != '$bruger' GROUP BY scooter.id ORDER BY RAND() LIMIT 1") or die (mysql_error());
Jeg har to tabler ved navn scooter og scooter_vote i dem er der disse felter:
Scooter_vote: id bruger_id scooter_id vote
Scooter: id nick
Jeg skal så bruge en mysql_query som udskriver id i tablen scooter men kun hvis $bruger ikke findes i feltet bruger_id hvor at scooter_id = med id'et i scooter tablen.
Jeg skal nok (måske...) kigge på det når du kommer med de de relevante oplysninger. Du har en query, og du siger "dur ikke". Det ved du da godt selv ikke er nok?
nu har du skrevet hvordan dine tabeller ser ud.. Så mangler vi bare at få et par (mindst tre) eksempler på hvad der kunne stå i de tabeller, og hvad det egentligt er du gerne vil have ud.. Det bliver noget rod at hente fra to tabeller.. Så vil den gange alle resultaterne i den ene, ind på resultaterne på den anden, så alle i den første tabel har en tilknytning til alle rækker i den anden, når du ikke tjekker mere på det.. Hvad er det du gerne vil have ud? Og er der evt steder hvor flere rækker passer?!?
Det her kan der f.eks stå i de forskelige tabller:
CREATE TABLE scooter ( id int(11) NOT NULL auto_increment, PRIMARY KEY (id) ) TYPE=MyISAM AUTO_INCREMENT=11 ;
# # Data dump for tabellen `scooter` #
INSERT INTO scooter VALUES (1); INSERT INTO scooter VALUES (2); INSERT INTO scooter VALUES (3); INSERT INTO scooter VALUES (4); INSERT INTO scooter VALUES (5); INSERT INTO scooter VALUES (6); INSERT INTO scooter VALUES (7); INSERT INTO scooter VALUES (8); INSERT INTO scooter VALUES (9); INSERT INTO scooter VALUES (10); # --------------------------------------------------------
# # Struktur dump for tabellen `scooter_vote` # # Creation: 26/10 2003 kl. 14:16:24 # Last update: 26/10 2003 kl. 18:56:45 #
CREATE TABLE scooter_vote ( id int(11) NOT NULL auto_increment, scooter_id int(11) NOT NULL default '0', bruger_id int(11) NOT NULL default '0', vote int(10) NOT NULL default '0', PRIMARY KEY (id) ) TYPE=MyISAM AUTO_INCREMENT=2 ;
# # Data dump for tabellen `scooter_vote` #
INSERT INTO scooter_vote VALUES (1, 1, 1, 5); INSERT INTO scooter_vote VALUES (1, 5, 1, 5); INSERT INTO scooter_vote VALUES (1, 9, 1, 5);
Jeg skal så bruge en mysql_query som udskriver id'et i tablen scooter men kun hvis $bruger ikke findes i fletet bruger_id i scooter_vote hvor at scooter_id = id'et i tablen scooter.
noget en stil af denne:
$result=mysql_query("SELECT * FROM scooter_vote,scooter WHERE scooter_vote.bruger_id != '$bruger' AND scooter_vote.scooter_id = scooter.id GROUP BY scooter.id ORDER BY RAND() LIMIT 1") or die (mysql_error());
evt $result = mysql_query("SELECT * FROM scooter LEFT JOIN scooter_vote ON scooter_vote.bruger_id != '$bruger' AND scooter_vote.scooter_id = scooter.id GROUP BY scooter.id ORDER BY RAND() LIMIT 1") or die (mysql_error());
Der er bare et problem det er at hvis der ikke er nogle andre brugere som ikke har stemt på f.eks scooter_id 5 så bliver den sprunget over :( scooter_vote.scooter_id = scooter.id
Jeg forstår fortsat ikke hvad du skal og vil - beklager. Men når du i din join har to felter med samme navn, id, tager den i din PHP kun den ene, sådan lidt "tilfældigt".
Den nicklasb kom med virker næsten det enste der mangler er at få den til at udskrive data selvom der f.eks ikke findes noget scooter_id med feks. 5 det står jo her: scooter_vote.scooter_id = scooter.id
jeg må altså lige som erikjacobsen melde pas.. Aner altså ikke lige hvad det er du vil, så kan kun sidde konstant og gætte.. er det en liste over alle scotere den skal tage det ud fra?
for så er det vel noget lignende;
$result = mysql_query('SELECT * FROM scooter_vote a LEFT JOIN scooter b ON b.scooter_id = a.id WHERE a.bruger_id != \'' . $bruger . '\' GROUP BY scooter.id ORDER BY RAND() LIMIT 1') or die (mysql_error());
ja, den er taget derekte fra hans eget eksempel ;) Men kunne forstille mig at den kun skulle udskrive én tilfældig.. Ved dog ikke hvad det er for en skod-tabel der er blevet sat sammen hvis flere brugere har samme id.. Men jeg kan ikke rigtig gøre andet så længe jeg ikke får mere at arbejde ud fra? Nu ved jeg han har en database med en masse tal i.. Men jeg ved stadig ikke hvilke tal han vil have ud, og hvilken sammenhæng der er mellem tallene..
Sorry havde ikke tid til at skrive tilbage før nu.
tablen scooter er selve "hovedetablen" og scooter_vote er en table som har data om mine brugers bedømmelser af de forskellige scootere...
Scooter_vote: id <- det siger siger sig selv bruger_id <- Brugerens id scooter_id <- id'et fra tablen scooter vote <-- hvor meget bruger vil give scooteren
Scooter: id <- det siger siger sig selv
Det vil sige at hvis queryen har valgt at hive f.eks id'et 5 ud af tablen scooter så hvis f.eks brugeren med id'et 2 vil stemme på den så kommer det til at se sådan ud i tablen scooter_vote:
id <- det siger sigselv (f.eks 2) bruger_id => 2 scooter_id => 5 vote => 6 //Hvor meget brugeren med id'et 2 f.eks har givet scooteren med id'et 5
Jeg skal så have lavet en mysql_query som denne nicklasb har lavet: $result = mysql_query("SELECT * FROM scooter LEFT JOIN scooter_vote ON scooter_vote.bruger_id != '$bruger' AND scooter_vote.scooter_id = scooter.id GROUP BY scooter.id ORDER BY RAND() LIMIT 1") or die (mysql_error());
Denne query virker kun hvis der er en anden bruger som har stemt på f.eks scooter_id 5 det står jo lige her: scooter_vote.scooter_id = scooter.id //Altså den vil kun hive data ud hvis en anden bruger har stemt på den samme scooter_id
ORDER BY RAND() LIMIT 1 // Jeg bruger RAND() for at den skal tage et tilfældig scooter og LIMIT 1 siger sig selv altså så den kun udskriver en af gangen.
Jeg skal brugen denne mysql_query til Hot Or Not dette er der for at brugeren ikke kan stemme på samme scooter mere end én gang: scooter_vote.bruger_id != '$bruger' AND scooter_vote.scooter_id = scooter.id
Så vil denne sql give dig alle de scootere, der ikke er blevet stemt på af bruger nummer 1 (udskift selv 1, og sæt selv din RAND()-halløj på)
select * from scooterbruger left join (scooter left join scootervote on scooter.id=scootervote.scooterid ) on scooterbruger.id=scootervote.brugerid where scooterbruger.id=3 and scootervote.id is null
$result = mysql_query("select * from brugere left join (scooter left join scooter_vote on scooter.id=scooter_vote.scooter_id ) on brugere.id=scooter_vote.bruger_id where brugere.id='$bruger' and scooter_vote.id is null ORDER BY RAND() LIMIT 1") or die (mysql_error());
Jeg kan kun finde en fejl og det er at den ikke udskriver noget ved id ( [id] => ), der skal den udskrive id'et fra tablen scooter
Min table ser sådan ud nu: $result = mysql_query("select * from test_brugere left join (test_scooter left join test_scooter_vote on test_scooter.id=test_scooter_vote.scooter_id ) on test_brugere.id=test_scooter_vote.bruger_id where test_brugere.id='$bruger' and test_scooter_vote.id is null ORDER BY RAND() LIMIT 1") or die (mysql_error());
$result = mysql_query("select test_scooter.id as id, test_scooter.nick as nick from test_brugere left join (test_scooter left join test_scooter_vote on test_scooter.id=test_scooter_vote.scooter_id ) on test_brugere.id=test_scooter_vote.bruger_id where test_brugere.id='$bruger' and test_scooter_vote.id is null ORDER BY RAND() LIMIT 1") or die (mysql_error()); if (mysql_num_rows($result) == '0') { echo 'Du har stemt på alle scooterne.'; } else { while($row=mysql_fetch_assoc($result)) {
$result = mysql_query("select test_scooter.id as id, test_scooter.nick as nick from test_brugere left join (test_scooter left join test_scooter_vote on test_scooter.id=test_scooter_vote.scooter_id ) on test_brugere.id=test_scooter_vote.bruger_id where test_brugere.id='$bruger' and test_scooter_vote.id is null ORDER BY RAND() LIMIT 1") or die (mysql_error()); if (mysql_num_rows($result) == '0') { echo 'Du har stemt på alle scooterne.'; } else { while($row=mysql_fetch_assoc($result)) { $id = $row['id'];
if($_POST['vote']) { mysql_query("INSERT INTO test_scooter_vote (scooter_id,bruger_id,vote) VALUES ('$id','$bruger','$_POST[vote]')"); $_SERVER['PHP_SELF']; }
if($_GET['last_id']) { $query=mysql_query("SELECT * FROM test_scooter WHERE id = '$_GET[last_id]'"); while($row = mysql_fetch_array($query)) { $ialt_stemmer=mysql_result(mysql_query("SELECT COUNT(bruger_id) FROM test_scooter_vote WHERE scooter_id = '$_GET[last_id]'"),0); $gennemsnit=mysql_result(mysql_query("SELECT ROUND(AVG(vote),2) AS gennemsnit FROM test_scooter_vote WHERE scooter_id = '$_GET[last_id]'"),0); echo 'stemmer: ('.$ialt_stemmer.') :<br>Gennemshit: '.$gennemsnit.'<br>'.$row['nick'].'<br><br>'; } }
$result = mysql_query("select test_scooter.id as id, test_scooter.nick as nick from test_brugere left join (test_scooter left join test_scooter_vote on test_scooter.id=test_scooter_vote.scooter_id ) on test_brugere.id=test_scooter_vote.bruger_id where test_brugere.id='$bruger' and test_scooter_vote.id is null ORDER BY RAND() LIMIT 1") or die (mysql_error()); if (mysql_num_rows($result) == '0') { echo 'Du har stemt på alle scooterne.'; } else { while($row=mysql_fetch_assoc($result)) { $id = $row['id'];
if($last_id) { $query=mysql_query("SELECT * FROM test_scooter WHERE id = '$last_id'"); while($row = mysql_fetch_array($query)) { $ialt_stemmer=mysql_result(mysql_query("SELECT COUNT(bruger_id) FROM test_scooter_vote WHERE scooter_id = '$last_id'"),0); $gennemsnit=mysql_result(mysql_query("SELECT ROUND(AVG(vote),2) AS gennemsnit FROM test_scooter_vote WHERE scooter_id = '$last_id'"),0); echo 'stemmer: ('.$ialt_stemmer.') :<br>Gennemshit: '.$gennemsnit.'<br>'.$row['nick'].'<br><br>'; } }
$result = mysql_query("select test_scooter.id as id, test_scooter.nick as nick from test_brugere left join (test_scooter left join test_scooter_vote on test_scooter.id=test_scooter_vote.scooter_id ) on test_brugere.id=test_scooter_vote.bruger_id where test_brugere.id='$bruger' and test_scooter_vote.id is null ORDER BY RAND() LIMIT 1") or die (mysql_error()); if (mysql_num_rows($result) == '0') { echo 'Du har stemt på alle scooterne.'; } else { while($row=mysql_fetch_assoc($result)) { $id = $row['id'];
Nej - det gider jeg ikke ;) Gør det noget? Du kan jo f.x blot opdatere hvis samme bruger stemmer på samme ting igen ved at hacke, i stedet for blot at indsætte.
Det er da mere spændende om man kan snyde med brugere.
Jeg skal jo også have udskrevet et billede af scooteren det gør jeg via denne:
$pic = mysql_query("SELECT id FROM scooter_billeder WHERE scooter_id = '$id' ORDER BY id DESC LIMIT 1"); $rowpic = mysql_fetch_array($pic); echo '<img border="0" src="scooter_image.php?hotornot='.$rowpic['id'].'" style="border: 1px solid #000000">';
Men efter jeg har lagt den ind i min while fra den query du lavet så hvis jeg opdatere siden et par. gange så står den bare og prøver på at loade siden ind men den bliver aldrig færdig :(
Der er heller ikke nogle problemer hvis jeg gør sådan:
$pic = mysql_query("SELECT id FROM scooter_billeder WHERE scooter_id = '$id' ORDER BY id DESC LIMIT 1"); $rowpic = mysql_fetch_array($pic); echo $rowpic['id'];
Men lige så snart jeg laver det til et billede så "fyrser" den nogle gange..
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.