webForumDet fria alternativet

Paging (Tidigare hoppa över)

14 svar · 447 visningar · startad av Leijonkungen

LeijonkungenMedlem sedan apr. 200428 inlägg
#1

Detta fungerar inte för mig av någon anledning. Jag får ett meddelande om att jag har ett fel i SQL-frågan. Tänkte använda detta i en liten nyhetsfunktion där de sex senaste nyheterna listas först följt av en lista på de 50 senaste nyheterna. Några förslag?

Tabellen med nyheterna heter "nyheter" och id:et kallas "nyheterID".

LarsGMedlem sedan dec. 200012 464 inlägg
#2

Vilket fel får du?

Generellt:

Nytt problem --> Ny tråd.

LeijonkungenMedlem sedan apr. 200428 inlägg
#3

Förut var det något fel men av någon anledning fungerar nu SQL-satsen i den bemärkelse att resultat skrivs ut. Dock inte alls som jag vill ha det. Nu skriver den ut alla nyheter trots att SQL-satsen tycks säga att den inte gör det.

Så här ser den ut:

SELECT *
FROM nyheter
WHERE nyheterID NOT IN ('SELECT TOP 10 nyheterID FROM nyheter
ORDER BY nyheterID DESC') ORDER BY nyheterID DESC

Engine^Medlem sedan dec. 20003 887 inlägg
#4

Ta bort apostroferna i din subselect.

LeijonkungenMedlem sedan apr. 200428 inlägg
#5

Engine^ skrev:

Ta bort apostroferna i din subselect.

Hmm, det är verkligen konstigt.
Om jag tar bort apostroferna blir det samma SQL-fel som tidigare:

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 TOP 10 nyheterID FROM nyheter ORDER BY nyheterID DESC) O

Och då kör jag alltså den här koden:

SELECT * FROM nyheter WHERE nyheterID NOT IN (SELECT TOP 10 nyheterID FROM nyheter ORDER BY nyheterID DESC) ORDER BY nyheterID DESC

Kör jag denna kod skrivs alla nyheter ut:

SELECT * FROM nyheter WHERE nyheterID NOT IN ('SELECT TOP 10 nyheterID FROM nyheter ORDER BY nyheterID DESC') ORDER BY nyheterID DESC

Konstigt är ordet.

@ndersMedlem sedan juni 200032 969 inlägg
#6

TOP stöds inte i MySQL. Du får ge dig på LIMIT.

PeeerMedlem sedan mars 20025 907 inlägg
#7

MySQL stödjer inte subselects (förrens i version 4.1?) ta dig en titt på limit istället.

LeijonkungenMedlem sedan apr. 200428 inlägg
#8

Peeer skrev:

MySQL stödjer inte subselects (förrens i version 4.1?) ta dig en titt på limit istället.

Novis som jag är: hur skulle en sådan se ut som gör samma sak?

PeeerMedlem sedan mars 20025 907 inlägg
#9
SELECT * FROM nyheter ORDER BY nyheterID DESC limit 10, 99999999

99999999 är bara ett stort tal för att få med alla poster efter rad 10. Vet inte om man kan skriva det på något "snyggare" sätt.

LeijonkungenMedlem sedan apr. 200428 inlägg
#10

Nu får jag detta fel i stället:

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 'LIMIT 0, 50' at line 1

:q

PeeerMedlem sedan mars 20025 907 inlägg
#11

Kan du visa din kod?

LeijonkungenMedlem sedan apr. 200428 inlägg
#12

Peeer skrev:

Kan du visa din kod?

Sure! I det här fallet är den genererad i DW MX2004, och ja, jag vet att det är som att svära i kyrkan att säga att man använder det här, men ändå: :D

$maxRows_rsNyheterResten = 50;
$pageNum_rsNyheterResten = 0;
if (isset($_GET['pageNum_rsNyheterResten'])) {
  $pageNum_rsNyheterResten = $_GET['pageNum_rsNyheterResten'];
}
$startRow_rsNyheterResten = $pageNum_rsNyheterResten * $maxRows_rsNyheterResten;

mysql_select_db($database_Databasen, $Databasen);
$query_rsNyheterResten = "SELECT * FROM nyheter ORDER BY nyheterID DESC limit 10, 99999999";
$query_limit_rsNyheterResten = sprintf("%s LIMIT %d, %d", $query_rsNyheterResten, $startRow_rsNyheterResten, $maxRows_rsNyheterResten);
$rsNyheterResten = mysql_query($query_limit_rsNyheterResten, $Databasen) or die(mysql_error());
$row_rsNyheterResten = mysql_fetch_assoc($rsNyheterResten);

if (isset($_GET['totalRows_rsNyheterResten'])) {
  $totalRows_rsNyheterResten = $_GET['totalRows_rsNyheterResten'];
} else {
  $all_rsNyheterResten = mysql_query($query_rsNyheterResten);
  $totalRows_rsNyheterResten = mysql_num_rows($all_rsNyheterResten);
}
$totalPages_rsNyheterResten = ceil($totalRows_rsNyheterResten/$maxRows_rsNyheterResten)-1;

Lycka till guys... :r

LarsGMedlem sedan dec. 200012 464 inlägg
#13

Nu har du med LIMIT två gånger. Ta bort den första.

PeeerMedlem sedan mars 20025 907 inlägg
#14

Gah.. kan du inte skriva ut själva sql-satsen precis innan du exekverar den?

die('sql: ' . $query_limit_rsNyheterResten);
$rsNyheterResten = mysql_query($query_limit_rsNyheterResten, $Databasen) or die(mysql_error());
LeijonkungenMedlem sedan apr. 200428 inlägg
#15

Nu så!!!
Jag tog bort den andra LIMIT:en och vips så funkade det!
Stort tack till er alla för all hjälp!

Ha en skön helg!

133 ms totalt · 3 externa anrop · v20260731065814-full.30151723
0 ms — hämta forumlista (cache)
0 ms — hämta statistik (cache)
130 ms — hämta tråd, inlägg och bilagor (db)