Toon posts:

SQL Eerst laatste records selecteren en die vervolgens alfab

Pagina: 1
Acties:
  • 992 views sinds 30-01-2008
  • Reageer

Verwijderd

Topicstarter
Goedenavond,
ik ben bezig om een query te maken in mysql om gegevens uit een tabel te halen. Ik wil graag maximaal 100 records laten zien dus ik was er al achter dat het met limit moest gaan gebeuren maar dan kan ik ze daarna niet meer alfabetisch sorteren, dit is wel een must. Hebben jullie misschien een idee hoe ik dit kan doen? De tabel bestaat uit o.a. een id veld en een artiest veld waar ze achteraf op gesorteert moeten worden.

Als ik dan die 100 records alfabetisch terug krijg wil ik ze graag in een tabel zetten, ik weet niet precies hoe ik kan zorgen dat hij ze in kolommen van vijf in een tabel kan zetten. het moet er dan dus ongeveer zo uit gaan zien:

Artiest Artiest
--------- ---------
|........| |.........|
|........| |.........| (De puntjes en streepjes moeten foto's voorstellen. :D
--------- ---------
Titel Titel

En dan per vijf en dan een nieuwe regel. Misschien is het wat veel in 1 topic maar als iemand op 1 vraag antwoord kan geven zou ik al erg blij zijn,
Alvast bedankt

[ Voor 6% gewijzigd door Verwijderd op 25-10-2004 21:01 ]


Verwijderd

maak eerst een view die de 100 records selecteert, en SELECT dan in je applicatie deze view met een sort-clause. Het om de 5 regels een lege regel moet eenvoudig vanuit de applicatie kunnen.

  • pjotrk
  • Registratie: Mei 2004
  • Laatst online: 15-07-2025
Sorteren en limit gaan prima samen in MySql hoor, alleen dan wel in de volgorde sorteren -> limit.


code:
1
2
3
4
SELECT * 
FROM `artiest` 
ORDER BY naam 
LIMIT 0, 100

Als je persé de eerste 100 records wilt hebben en die dan wilt sorteren kan dat met een subselect (vanaf mysql 4.1)
code:
1
2
3
4
5
6
SELECT * 
FROM `artiest` 
WHERE exists (SELECT * 
              FROM `artiest`
              LIMIT 0, 100)
ORDER BY naam


edit:
foutje uit sql gehaald (DESC zonder order by vlak voor de LIMIT)

[ Voor 12% gewijzigd door pjotrk op 25-10-2004 23:17 ]


Verwijderd

Topicstarter
Dank,
nu ben ik er alleen nog niet uit hoe hij, wanneer er meer dan 5 <TD>'s ingevoerd moeten worden automatisch op een nieuwe <TR> begint, ik zal vannacht proberen of jullie oplossingen werken, ik laat het zsm weten, iemand een idee voor die table?

  • Wacky
  • Registratie: Januari 2000
  • Laatst online: 28-04 21:25

Wacky

Dr. Lektroluv \o/

Die automatische <tr>'s zul je in je code moeten gebruiken door een loopje en een teller te gebruiken :)

Nu ook met Flickr account


Verwijderd

Topicstarter
De teller heb ik stukken over gelezen dat is met <i> en ++ ofzo toch? Hoe maak je dan zo'n loop? Met while?

Verwijderd

for ($x = 0; $x < $items;$x++)

$x = 0; oftewel zet variabel $x op nul, (als je daar wilt beginnen)
$x < $Items; doe een aantal rondjes ($x moet kleiner blijven dan het aantal dat vermeld
staat in $items)
$x++ Tel bij $x 1 op zodat je nog een rondje gaat.

is in php

[ Voor 7% gewijzigd door Verwijderd op 25-10-2004 22:35 ]


Verwijderd

Topicstarter
<?$select = "SELECT * FROM yormusic WHERE exists (SELECT * FROM id DESC LIMIT 0, 100) ORDER BY artiest";
$query = mysql_query($select)or die(mysql_error());
while($lijst = mysql_fetch_object($query)){?>

werkt niet op deze manier,

You have an error in your SQL syntax near 'exists (SELECT * FROM id DESC LIMIT 0, 100) ORDER BY artiest' at line 1
wat houd exists precies in?

Verwijderd

Topicstarter
bedankt voor de telling, daar heb ik vertrouwen in! :D

  • pjotrk
  • Registratie: Mei 2004
  • Laatst online: 15-07-2025
Idd met een kolomtellertje, de loop is gewoon records uit de database halen totdat je niets meer tegen komt zoiets krijg je dan (nog niet getest):

PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
<?
$columns = 5;
$curCol = 0;

echo '<table>';

while ( artiesten nog niet op )
{
    // bij de eerste kolom openen
    if ( $curCol++ == 1)
    {
        echo '<tr>';
    }

    echo '<td>artiest</td>';

    // bij de laatste kolom sluiten en opnieuw beginnen met tellen
    if ( $curCol == $columns  )
    {
        echo '</tr>';
        $curCol = 0;
    }
}
// maak de laatste rij af
if ( $curCol != 0 )
{
    echo str_repeat( '<td></td>', $columns - $curCol );
    echo '</tr>';
}

echo '</table>';
?>

Verwijderd

Topicstarter
$select = "SELECT * FROM yormusic WHERE exists (SELECT * FROM yormusic DESC LIMIT 0, 100) ORDER BY artiest";

die werkt niet bedoel ik, ik heb een veld id wat automatisch oploopt dus ik denk dat ik die er ook in mee moet nemen of hoeft dat niet per se? Indien het ook op deze manier kan heb ik geen idee wat ik nu fout doe

Verwijderd

Topicstarter
En dan moet ik die kolomteller nog even het aantal records in mijn tabel laten optellen of doet ie dat automatisch al en zie ik dat over het hoofd?

Verwijderd

Topicstarter
Haha,
ik zit de hele topic eens door te lezen en ik begin door te krijgen dat ik eigenlijk geen zak snap van het hele mysql als ik het met jullie vergelijk:D. Ik ga in ieder geval proberen om eruit te komen maar nu is mn grootste probleem nog dat ie alleen de laatste 100 records geeft omdat het anders te vol raakt in mn tabelletje. Ik wil dus dat ie automatisch de eerste weggooit als er een 101ste komt.

  • P_de_B
  • Registratie: Juli 2003
  • Niet online
offtopic:
Nive, met het Afbeeldingslocatie: http://gathering.tweakers.net/global/templates/silver/images/icons/edit.gif icoontje kun je je post wijzigen

Oops! Google Chrome could not find www.rijks%20museum.nl


Verwijderd

Topicstarter
Ik denk dat het niet helemaal duidelijk overgekomen is dat ik gebruik maak van een automatisch optellend id veld waardoor ik niet kan werken met een gewone limit maar dus volgens mij twee queries moet gebruiken, eerst eentje die de laatste honderd neemt en dan eentje die die honderd sorteerd op alfabetische volgorde.

  • Wacky
  • Registratie: Januari 2000
  • Laatst online: 28-04 21:25

Wacky

Dr. Lektroluv \o/

Als je het zo doet:

code:
1
'ORDER BY 'naam' LIMIT 0,100


Dan sorteerd ie in je query al op naam :?

[ Voor 10% gewijzigd door Wacky op 25-10-2004 23:12 ]

Nu ook met Flickr account


  • pjotrk
  • Registratie: Mei 2004
  • Laatst online: 15-07-2025
Verwijderd schreef op 25 oktober 2004 @ 22:44:
Ik denk dat het niet helemaal duidelijk overgekomen is dat ik gebruik maak van een automatisch optellend id veld waardoor ik niet kan werken met een gewone limit maar dus volgens mij twee queries moet gebruiken, eerst eentje die de laatste honderd neemt en dan eentje die die honderd sorteerd op alfabetische volgorde.
In principe maakt dat niets uit, limit werkt dan ook nog wel maar ik zie nog een stom copy past foutje in mijn sql code, maar als je alleen de laatste 100 wil hebben is het id wel makkelijk voor het omkeren van de rijen in de subselect zodat je inderdaad de 100 laatste ipv de 100 eerste krijgt.
code:
1
2
3
4
5
6
7
8
SELECT *
FROM yormusic
WHERE exists (
    SELECT * 
    FROM yormusic 
    ORDER BY id DESC 
    LIMIT 0, 100) 
ORDER BY artiest";
exists houdt overigens in: selecteer alle rijen die ook in de subselect voorkomen.

maar dit werkt dus alleen vanaf mysql 4.1, anders zou je de query moeten opsplitsen in 2 query's


Ook is het misschien handig om te beginnen met wat turorials doornemen, vaak is dat eenvoudiger te begrijpen dan zomaar een stuk code van een ander, en leerzamer :)
Pagina: 1