2011-04-26 6 views
0

Salut simple question je suppose, mais je n'arrive pas à comprendre comment lister mysql sql comme je le veux.Commande MySQL Par numéro

basiclly dans une ligne que j'ai CityID de Je veux être en mesure de tirer que == 14 et leur montrer du CityID au sommet du retour (MAIS PAS COMME COUNT)

pour par exemple Perth = = 15 Melbourne == 14 Preston == 14 Sydney == 13

actuellement, ils montrent que ce Sydney == 13 == Perth 15 Melbourne == 14 Preston == 14

mon code

$sth = mysql_query("SELECT users.id as id, users.username as username, profile.defaultpictureid as picture FROM users, userprofiles as profile WHERE online = '1' AND profile.country = ".$this->country." AND profile.state = ".$this->state." AND profile.city = ".$this->city." ORDER BY if (profile.city = 12276,0,1)");

Le code ci-dessus semble fonctionner maintenant.

Cependant semble également imprimer les données deux fois.

[{"id": "7", "nom d'utilisateur": "A", "image": "0"}, {"id": "1", "nom d'utilisateur": "B", "image ":" 0 "}, {" id ":" 1 "," nom d'utilisateur ":" B "," image ":" 1 "}, {" id ":" 7 "," nom d'utilisateur ":" A ", « image »: « 1 »}]

+2

Montrez-nous la requête que vous avez jusqu'à présent ... –

+0

la question semble être le profile.defaultpictureid qui devrait A == 0 et B devrait retourner 1 – RussellHarrower

Répondre

2

vous choisissez de deux tables (utilisateurs et profils), mais ont pas spécifié aucune sorte de relation entre quand dans votre clause where, ce que vous obtenez est le produit cartésien des deux, ce qui explique pourquoi vous obtenez les résultats dupliqués.

Je devine que votre requête devrait ressembler à quelque chose comme ceci:

SELECT users.id as id, users.username as username, profile.defaultpictureid as picture 
FROM users, userprofiles as profile 
WHERE 
    online = 1 AND 
    profile.country = {$this->country} AND 
    profile.state = {$this->state} AND 
    profile.city = {$this->city} AND 
    users.id = userprofiles.userid  <---the join condition for the two tables 
ORDER BY if (CityID = 14, 1, 0), profile.city 
0

Vous pouvez appliquer une clause if dans le tri

order by if(CityID = 14,0,1) 
+0

Juste essayé cela et malheureusement cela n'a pas fonctionné Voici mon code [code] $ sth = mysql_query ("SELECT users.id comme id, users.username comme nom d'utilisateur, profile.defaultpictureid comme image FROM utilisateurs, userprofiles comme profil WHERE en ligne = '1' AND profile.country = ". $ this-> pays." ET profile.state = ". $ this-> état." AND profil.city = ". $ this-> ville." ORDER BY if (profile.city = 12276,0,1) "); [/ code] – RussellHarrower

+0

qui fonctionne, mais maintenant un est poursuivre avec le profil.defaultpictureid – RussellHarrower