web-dev-qa-db-fra.com

Aide avec MySQL à la requête $ WPDB

Voici mon problème. J'ai trois tables que je voudrais interroger: états, points et points d'état.

States contient stateid et name. Points: pointid, pointlat, pointlng. State_points: Stateid, Pointid.

Je dois construire un tableau qui affiche les états, puis les points correspondants. Pour ce faire, je pensais que la meilleure façon de procéder ressemblerait à ce tutoriel: http://www.bitsofphp.com/avoid-executing-mysql-queries-within-loops/

Interrogez tous les états, créez un tableau en utilisant les stateID comme arrayids.
Sélectionnez ensuite lat, lng et stateid dans la table des points et state_points. Ajoutez les points (lat et lng) au tableau, en utilisant l'id stateid sélectionné dans la deuxième requête en tant qu'id du tableau

global $wpdb;
$states = $wpdb->query("SELECT * from wp_states");
echo $states;
while ($state = mysql_fetch_array($states)) {
    $arrayState[$state['stateid']]=$state;
}
$points = $wpdb->query("SELECT wp_state_points.statepointid, wp_state_points.stateid, wp_state_points.pointid, wp_points.pointid, wp_points.lat, wp_points.lng FROM wp_state_points, wp_points WHERE wp_state_points.pointid = wp_points.pointid");
while ($point = mysql_fetch_array($points)) {
    $arrayState[$point['stateid']]['points'][]=$point;
}                                                      
foreach ($arrayState as $astate) {                              
    echo $astate['name'];                                                       
    foreach ($astate['points'] as $apoint) {
        echo $apoint['lat'];                                                              
    }                                                           
}

Quelque chose comme ça cependant je reçois "Attention: mysql_fetch_array (): l'argument fourni n'est pas une ressource de résultat MySQL valide dans ..."

Je sais que ma requête renvoie des données (au moins la première). Je pense que cette requête wordpress ne supporte tout simplement pas cela.

Je pourrais utiliser get_results pour retourner un tableau. Mais pour que cela fonctionne, les arrayids doivent être les mêmes que les stateids

Que puis-je faire pour que cela fonctionne?

Merci

1
Jared

http://codex.wordpress.org/Class_Reference/wpdb

query renvoie le nombre de lignes affectées. Utilisez plutôt get_results, qui renvoie toutes les lignes spécifiées par la requête. Vous pouvez utiliser le deuxième paramètre pour spécifier le mode de renvoi des résultats, sous forme d'objets, de tableau, etc.

Lorsque vous utilisez sql, vous ne devez utiliser que wpdb, il existe très rarement une raison de traiter les fonctions php avec le préfixe mysql_, comme le fait l'API de base de données de WordPress.

1
Tom J Nowell

Donc, la façon de le faire serait d'utiliser get_results en tant que OBJECT_K, avec stateid étant la première colonne interrogée.

Ensuite, je voudrais utiliser un foreach sur les points demandés pour ajouter les points à l'état associé?

Ce que j’essaie de réaliser, c’est un fichier JSON avec la structure suivante:

[
{
    "stateid":"001",
    "name":"Alaska",
    "points":
        {
            "point":
                [
                    {"id":"00001", "lat":"40.4038","lng":"-30.35263"},
                    {"id":"00002", "lat":"40.4013","lng":"-30.31355"},
                    {"id":"00003", "lat":"40.4023","lng":"-30.35235"},
                ]
        }
    "stateid":"002",
    "name":"Alabama",
    "points":
        {
            "point":
                [
                    {"id":"00004", "lat":"41.4038","lng":"-31.35263"},
                    {"id":"00005", "lat":"42.4013","lng":"-32.31355"},
                    {"id":"00006", "lat":"43.4023","lng":"-33.35235"},
                ]
        }

    and so on for all of the states.

}]

Peut-être est-il préférable d'utiliser simplement une requête, tous les points auxquels un état est associé, mais je n'ai besoin que d'en référencer un pour obtenir le nom de l'état? J'essayais d'éviter cela car il me semble que le transfert de données est imparfait, mais peut-être que c'est mieux que de lancer 2 requêtes et d'éditer le tableau?

0
Jared