Avatar billede warberg Juniormester
05. december 2010 - 00:01 Der er 5 kommentarer og
1 løsning

Fra mySQL til php, SET @a :=0;

Et udtræk fungerer perfekt direkte i mySQL.
Jeg vil gerne have udtrækket sat ind i en php-side.

Altså i stil med $q = mysql_query("SELECT....")
while($r = mysql_fetch_array($q)) {...}

Det driller, specielt første linje, SET @a :=0;


Når, her kommer koden som altså virker fint direkte i mySQL'en:


SET @a :=0;

SELECT target AS Klub, COUNT( * ) AS Kampe, MIN( DATE ) AS Fra_dato, MAX( DATE ) AS Til_dato, DATEDIFF( MAX( DATE ) , MIN( DATE ) ) AS dage, SUM( points ) AS POINT, SUM( points =3 ) AS Win, SUM( points =1 ) AS Draw, SUM( goalf ) AS Mal_for, SUM( goala ) AS Mal_imod, SUM( goalf - goala ) AS Dif
FROM (

SELECT IF( points >0, @a , -1 * @a := @a +1 ) AS snum, target, DATE, points, goalf, goala
FROM matchtarget
ORDER BY target, DATE
) AS q
GROUP BY target, snum
ORDER BY kampe DESC , POINT DESC , dif DESC
LIMIT 10 ;
Avatar billede coderdk Praktikant
05. december 2010 - 00:27 #1
har du prøvet at køre dem som to SQL-statements?

E.g.

mysql_query( "SET @a :=0" );
$sql = "SELECT target AS Klub, COUNT( * ) AS Kampe, MIN( DATE ) AS Fra_dato, MAX( DATE ) AS Til_dato, DATEDIFF( MAX( DATE ) , MIN( DATE ) ) AS dage, SUM( points ) AS POINT, SUM( points =3 ) AS Win, SUM( points =1 ) AS Draw, SUM( goalf ) AS Mal_for, SUM( goala ) AS Mal_imod, SUM( goalf - goala ) AS Dif
FROM (

SELECT IF( points >0, @a , -1 * @a := @a +1 ) AS snum, target, DATE, points, goalf, goala
FROM matchtarget
ORDER BY target, DATE
) AS q
GROUP BY target, snum
ORDER BY kampe DESC , POINT DESC , dif DESC
LIMIT 10";

$qh = mysql_query( $sql );

osv?
Avatar billede warberg Juniormester
05. december 2010 - 00:30 #2
Du er en stjerne! Læg et svar...
Avatar billede coderdk Praktikant
05. december 2010 - 00:35 #3
Sågerne :)
Avatar billede miqe Nybegynder
05. december 2010 - 00:37 #4
mysql_query() understøtter som sådan ikke multiple queries.

Der findes dog varieationer af dette,
http://www.php.net/manual/en/function.mysql-query.php#91669
der dog ikke vil kunne bruges i dit tilfælde, da du behøver resultatet af dit andet query.

Man kan evt. forsøge at splitte queries op i flere kald
http://www.dev-explorer.com/articles/multiple-mysql-queries
I dit tilfælde:

mysql_query("SET @a :=0");
$result = mysql_query("SELECT target AS Klub, COUNT( * ) AS Kampe, MIN( DATE ) AS Fra_dato, MAX( DATE ) AS Til_dato, DATEDIFF( MAX( DATE ) , MIN( DATE ) ) AS dage, SUM( points ) AS POINT, SUM( points =3 ) AS Win, SUM( points =1 ) AS Draw, SUM( goalf ) AS Mal_for, SUM( goala ) AS Mal_imod, SUM( goalf - goala ) AS Dif
FROM (

SELECT IF( points >0, @a , -1 * @a := @a +1 ) AS snum, target, DATE, points, goalf, goala
FROM matchtarget
ORDER BY target, DATE
) AS q
GROUP BY target, snum
ORDER BY kampe DESC , POINT DESC , dif DESC
LIMIT 10");

Jeg har dog ikke testet ovenstående, og ved derfor ikke om det vil virke.

Muligvis kan du lave dine 2 queries om til et view baseret på en funktion i mysql, hvis du har rette permissions i databasen og herefter kalde dit view via mysql_query().
Avatar billede miqe Nybegynder
05. december 2010 - 00:40 #5
Hæhæ
Der kom du mig lige i forkøbet coderdk ;-)
Avatar billede warberg Juniormester
05. december 2010 - 00:43 #6
Det fungerer som ønsket.

-> miqe, jeg er faktisk ude i et view, matchtarget er et view. Jeg er dog lidt ude at svømme, men det ser ud til at virke...

Mange tak for hjælpen.
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

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