[Mysql] Order By doet het niet

Pagina: 1
Acties:

  • Dentist
  • Registratie: December 2000
  • Laatst online: 28-08 13:59

Dentist

Next patient please...

Topicstarter
Ik heb de volgende code :

PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
   // Alle adviesopdrachten
   $query = ("SELECT * FROM Opdrachtsoort WHERE Advies = 'True'")or die(mysql_error());
   $result = mysql_query($query);
   while ($answer = mysql_fetch_array($result) ){
   // Alle adviesopdrachten van Adviseur 1, met rol 1 of 2
   $OpdrachtID = $answer["OpdrachtID"];
   $query2 = ("SELECT OpdrachtID FROM OpdrachtKoppeling WHERE (OpdrachtID = '$OpdrachtID' and AD_ID = '1') and (rol = '1' or rol = '2')")or die(mysql_error());
   $result2 = mysql_query($query2);
   while ($answer2 = mysql_fetch_array($result2) ){
   $OpdrachtID2 = $answer2["OpdrachtID"];
   $query3 = ("SELECT * FROM Opdracht WHERE OpdrachtID = '$OpdrachtID2' ORDER BY 'Jaar' DESC")or die(mysql_error());
   $result3 = mysql_query($query3);
   while ($answer3 = mysql_fetch_array($result3) ){
   // hier gooit ie allerlei informatie eruit...
  }


Het probleem is nu : Ik wil graag de meest recente opdrachten eerst, maar om de een of andere reden werkt de ORDER BY 'Jaar' DESC niet. Als ik de opdrachtID's bekijk, zie ik dat die wel georderd zijn.

Ik vermoed dat dit door de manier van queries combineren komt, maar weet even niet hoe ik dit handiger kan doen (ik vermoed met joins?). Weet iemand hoe ik dit kan oplossen?

  • Bosmonster
  • Registratie: Juni 2001
  • Laatst online: 29-08 19:47

Bosmonster

*zucht*

Ehh... wel eens van indenten gehoord?

Oftewel je code leesbaar maken voor ons...

Ik zie nu ook een hele berg onafgesloten while's.. :?

  • ironx
  • Registratie: Augustus 2001
  • Laatst online: 21-08 21:12
PHP:
1
2
$query = ("SELECT * FROM Opdrachtsoort WHERE Advies = 'True'")or die(mysql_error()); 
$result = mysql_query($query);


je gooit een php-commando in je query?


This posting is provided "AS IS" with no warranties, and confers no rights.


  • Dentist
  • Registratie: December 2000
  • Laatst online: 28-08 13:59

Dentist

Next patient please...

Topicstarter
die while's worden allemaal afgesloten, maar dat is verder niet relevant voor de code.

Maar goed, ik begrijp dat jij het ook niet weet?

  • Dentist
  • Registratie: December 2000
  • Laatst online: 28-08 13:59

Dentist

Next patient please...

Topicstarter
ironx schreef op 10 november 2002 @ 21:34:
PHP:
1
2
$query = ("SELECT * FROM Opdrachtsoort WHERE Advies = 'True'")or die(mysql_error()); 
$result = mysql_query($query);


je gooit een php-commando in je query?
Kennelijk.

  • Darkvater
  • Registratie: Januari 2001
  • Laatst online: 26-08-2024

Darkvater

oh really?

PHP:
1
2
$query = ("SELECT * FROM Opdrachtsoort WHERE Advies = 'True'")or die(mysql_error()); 
$result = mysql_query($query);


Dit is niet echt goed zou ik zeggen. Je kan veel beter:
PHP:
1
2
$query = ("SELECT * FROM Opdrachtsoort WHERE Advies = 'True'");
$result = mysql_query($query) or die(mysql_error());

of nog beter:
PHP:
1
$result = mysql_query("SELECT * FROM Opdrachtsoort WHERE Advies = 'True'") or die(mysql_error());



Want zoals jij het doet, en er gaat iets fout, zal je mysql_error() krijgen. Want een string toekennen aan een variabele gaat altijd goed en heeft helemaal niks te doen met mysql.

Trouwens, heb je het al geprobeerd om alleen die ene query uit te voeren, desnoods in phpadmin?


Windows Vista? *NEVER* Het waarom - Opera forever!!!
I've seen chickens that were more menacing. Chickens in a coma. On ice. In my fridge


  • Kermit.de.Kikker
  • Registratie: Februari 2002
  • Laatst online: 23:43
je moet je veldnaam waarop je wilt sorteren niet quoten

  • Darkvater
  • Registratie: Januari 2001
  • Laatst online: 26-08-2024

Darkvater

oh really?

Kermit.de.Kikker schreef op 10 November 2002 @ 21:43:
je moet je veldnaam waarop je wilt sorteren niet quoten
Hehe, precies, heb ik ook niet gezien:
PHP:
1
$query3 = ("SELECT * FROM Opdracht WHERE OpdrachtID = '$OpdrachtID2' ORDER BY 'Jaar' DESC")or die(mysql_error());


hij ordert nu volgens de string Jaar. Als je op veld 'Jaar' wilt sorteren, doe je `Jaar` of Jaar. Zo dus:
PHP:
1
2
$query3 = ("SELECT * FROM Opdracht WHERE OpdrachtID = '$OpdrachtID2' ORDER BY `Jaar` DESC")or die(mysql_error());
$query3 = ("SELECT * FROM Opdracht WHERE OpdrachtID = '$OpdrachtID2' ORDER BY Jaar DESC")or die(mysql_error());


Windows Vista? *NEVER* Het waarom - Opera forever!!!
I've seen chickens that were more menacing. Chickens in a coma. On ice. In my fridge


  • Dentist
  • Registratie: December 2000
  • Laatst online: 28-08 13:59

Dentist

Next patient please...

Topicstarter
Heb beide manieren geprobeerd, maar dat maakt niks uit helaas..

  • Darkvater
  • Registratie: Januari 2001
  • Laatst online: 26-08-2024

Darkvater

oh really?

Dentist schreef op 10 november 2002 @ 21:49:
Heb beide manieren geprobeerd, maar dat maakt niks uit helaas..
Ook in PHPadmin?


Windows Vista? *NEVER* Het waarom - Opera forever!!!
I've seen chickens that were more menacing. Chickens in a coma. On ice. In my fridge


  • Dentist
  • Registratie: December 2000
  • Laatst online: 28-08 13:59

Dentist

Next patient please...

Topicstarter
Darkvater schreef op 10 november 2002 @ 21:40:
[...]

Want zoals jij het doet, en er gaat iets fout, zal je mysql_error() krijgen. Want een string toekennen aan een variabele gaat altijd goed en heeft helemaal niks te doen met mysql.

Trouwens, heb je het al geprobeerd om alleen die ene query uit te voeren, desnoods in phpadmin?
Ik zal binnenkort eens naar mijn schrijfstijl kijken.. Ik weet dat ie niet helemaal ok is, maar ik doe te weinig met php/mysql om er echt veel tijd in te steken.

Die query werkt overigens prima in phpadmin.

  • Darkvater
  • Registratie: Januari 2001
  • Laatst online: 26-08-2024

Darkvater

oh really?

Dentist schreef op 10 November 2002 @ 21:52:
[...]


Ik zal binnenkort eens naar mijn schrijfstijl kijken.. Ik weet dat ie niet helemaal ok is, maar ik doe te weinig met php/mysql om er echt veel tijd in te steken.

Die query werkt overigens prima in phpadmin.
Als die primat werkt in phpadmin, copieer je de sql string van phpadmin, en zet je het in je eigen string :) Het kan dat je een klein dingetje gewoon over het hoofd hebt gezien :o


Windows Vista? *NEVER* Het waarom - Opera forever!!!
I've seen chickens that were more menacing. Chickens in a coma. On ice. In my fridge


  • Dentist
  • Registratie: December 2000
  • Laatst online: 28-08 13:59

Dentist

Next patient please...

Topicstarter
En dát is dus het vreemde, aangezien ik dat al heb gedaan. Er staat exact hetzelfde als in phpmyadmin, maar toch werkt het niet. Mijn vermoeden is dat het komt door die geneste structuur, maar ik kom er dus niet uit..

  • Dentist
  • Registratie: December 2000
  • Laatst online: 28-08 13:59

Dentist

Next patient please...

Topicstarter
Als ik het overigens nog eens doorlees denk ik dat het zit in de constructie dat ik in een while telkens 1 record aanroep, en dat record vervolgens sorteer (wat dus NIETS uitmaakt).

Ik denk dat ik toch met joins oid moet gaan werken. Iemand een idee hoe ik de boel kan herschrijven zodat ik in de laatste while niet 1 record ophaal, maar alle records tegelijkertijd, zodat de order by ook daadwerkelijk iets te doen heeft?

Misschien kan ik in de eerste query :

PHP:
1
$query = ("SELECT * FROM Opdrachtsoort WHERE Advies = 'True'");


iets toevoegen waardoor hij het datumveld joint? Dan kan ik hem daar al orderen en dan is het opgelost denk ik.

  • smaij
  • Registratie: November 2000
  • Laatst online: 23:57
Jezus.. lees is een php boek door..

voorbeeld :

PHP:
1
2
3
4
<?
$query = "SELECT * FROM Opdrachtsoort WHERE Advies = 'True'";
$result = mysql_query($query)  or die(mysql_error());
?> 


dat is wel even iets anders dan jij daar doet.. misschien werkt het toevallig wel ofzo maar echt codenetiquete is het niet!!

en gebruik indents.. is echt het belangrijkste zeker als je nog alles moet leren! dan zie je tenminste je fouten!!!

En voordat ik je laatste vraag kan beantwoorden moet je:

1. je vraag beter stellen
2. een beetje nette code laten zien
3. een klein databasestructuurtje ofzo?

en vervolgens zou ik eerst de search gebruiken voor dit soort vragen, want het is toch wel erg pre. en HOE joins in elkaar zitten heeft D2K of ACM dacht ik wel heel simpel en snel uitgelegd in 1 van hun FAQ's

  • smaij
  • Registratie: November 2000
  • Laatst online: 23:57
Nou ok ik kan zo snel die FAQ niet meer vinden??? waar is dat mooie stukje code gebleven over joins :?

maar een query met joins zoals jij ze hebt.
3 tabellen?
- Opdrachtsoort
- OpdrachtKoppeling
- Opdracht

En je wilt de opdrachtsoort tabel ook laten zien met resultaten als in de andere tabel geen resultaten zijn op dat betreffende OpdrachtID (effe simpel gezegd)

SELECT
os.*,
ok.*,
op.*
FROM
Opdrachtsoort AS os,
LEFT JOIN OpdrachtKoppeling AS ok ON os.OpdrachtID = ok.OpdrachtID,
LEFT JOIN Opdracht AS op ON ok.OpdrachtID = op.OpdrachtID
WHERE
/// mag je zelf verzinnen
ORDER BY // mag jezelf verzinnen

En neem dit niet klakkeloos over maar kijk wat ik doe ;)

ik gebruik overigens voor het testen van queries geen PHPMyAdmin maar draai lokaal mysqlfront. gewoon lokaal een test databaseje :)

  • Dentist
  • Registratie: December 2000
  • Laatst online: 28-08 13:59

Dentist

Next patient please...

Topicstarter
Ik heb het nu werkend na zelf even wat gelezen te hebben over joins, maar ik gebruik niet dat AS. Ik neem aan dat dat alleen is om dingen wat overzichtelijker te maken?

PHP:
1
2
3
$query = ("SELECT * FROM Opdrachtsoort 
LEFT JOIN Opdracht ON Opdrachtsoort.OpdrachtID = Opdracht.OpdrachtID 
WHERE `$soort` = 'True' ORDER BY Opdracht.Jaar DESC");


Nu ordered hij direct de id's, waarmee ik later gegevens ga opvragen.
Voor de rest houd ik mijn geneste structuur aan. Ik weet niet wat 'beter' is, die geneste structuur of 1 grote query met joins?

Bedankt voor je hulp overigens, nu weet ik ook ongeveer hoe joins werken :D

(dat van mijn php-schrijfstijl wist ik al :))

  • smaij
  • Registratie: November 2000
  • Laatst online: 23:57
Dentist schreef op 10 November 2002 @ 22:28:
Nu ordered hij direct de id's, waarmee ik later gegevens ga opvragen.
Voor de rest houd ik mijn geneste structuur aan. Ik weet niet wat 'beter' is, die geneste structuur of 1 grote query met joins?
tja its just netheid en performance zal misschien iets sneller zijn met complexe queries.. Nu haal jij met * alles op, ik zou dat nooit doen eigenlijk.. alleen de velden die je nodig hebt. in mijn voorbeeld heb ik * gebruikt, ik weet het, maarja :P

  • Dentist
  • Registratie: December 2000
  • Laatst online: 28-08 13:59

Dentist

Next patient please...

Topicstarter
PHP:
1
2
3
4
5
$query = ("SELECT os.*, op.*, ok.* FROM Opdrachtsoort AS os
              LEFT JOIN Opdracht AS op ON os.OpdrachtID = op.OpdrachtID
              LEFT JOIN OpdrachtKoppeling AS ok ON os.OpdrachtID = ok.OpdrachtID
              WHERE `$soort` = 'True' and ok.AD_ID = '$uid'
              ORDER BY `Jaar` DESC");


Ok, ik heb de boel even verbouwd.. Mooi uitgangspunt om eens netjes te gaan werken :D Scheelt ook een hele hoop nesting in php.

  • smaij
  • Registratie: November 2000
  • Laatst online: 23:57
Dentist schreef op 10 November 2002 @ 22:44:
PHP:
1
2
3
4
5
$query = ("SELECT os.*, op.*, ok.* FROM Opdrachtsoort AS os
              LEFT JOIN Opdracht AS op ON os.OpdrachtID = op.OpdrachtID
              LEFT JOIN OpdrachtKoppeling AS ok ON os.OpdrachtID = ok.OpdrachtID
              WHERE `$soort` = 'True' and ok.AD_ID = '$uid'
              ORDER BY `Jaar` DESC");


Ok, ik heb de boel even verbouwd.. Mooi uitgangspunt om eens netjes te gaan werken :D Scheelt ook een hele hoop nesting in php.
MOOI ZO.. je leert het al :9~

  • Dentist
  • Registratie: December 2000
  • Laatst online: 28-08 13:59

Dentist

Next patient please...

Topicstarter
Probleem is dat ik heb leren phpen van iemand die zelf kennelijk ook geen structuur heeft, maar wel altijd redelijk mooie dingen weet te maken.. Die structuur (of hoe je het wil noemen) neem je dan automatisch over.

nogmaals thx.

  • Goodielover
  • Registratie: November 2001
  • Laatst online: 18-08 11:34

Goodielover

Only The Best is Good Enough.

In welke tabel is `jaar` een veld?
Als je niet alle velden uit alle tebellen nodig hebt is het beter de select-clause uit te schrijven.
Pagina: 1