webForumDet fria alternativet

Paging (Tidigare hoppa över)

Databaser & SQL

14 svar · 447 visningar · startad av Leijonkungen

Medlem sedan apr. 200428 inlägg
Frågan#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".

Medlem sedan dec. 200012 464 inlägg
#2

Vilket fel får du?

Generellt:

Nytt problem --> Ny tråd.

Medlem 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

Medlem sedan dec. 20003 887 inlägg
#4

Ta bort apostroferna i din subselect.

Medlem 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.

Medlem sedan juni 200032 967 inlägg
#6

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

Medlem 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.

Medlem 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?

Medlem 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.

Medlem 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

Medlem sedan mars 20025 907 inlägg
#11

Kan du visa din kod?

Medlem 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

Medlem sedan dec. 200012 464 inlägg
#13

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

Medlem 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());
Medlem 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!

265 ms totalt · 4 externa anrop · v20260731065814-full.1dc6f849
120 ms — deklarationer (db)
0 ms — hämta statistik (cache)
137 ms — hämta tråd, inlägg och bilagor (db)
125 ms — ändringar (db)