2011-08-11 3 views
0

J'ai deux tables.Comment faire un PHP Dans une requête?

  1. Les clients
  2. Ordres

Je veux voir la dernière commande pour tous les clients. Je l'ai fait en utilisant deux requêtes différentes:

$sql = "SELECT * FROM Customers"; 
$rslt = mysql_query($sql); 
WHILE($row = mysql_fect_object($rslt)) 
{ 
    $sql_order = "SELECT * FROM Orders WHERE customer_id = $row->customer_id 
       ORDER BY DESC LIMIT 0,1"; 
    ................ 
    ................ 
} 

La sortie est parfaite mais je dois écrire du code PHP.

Y at-il un moyen que je peux simplement afficher les résultats de la requête, sans l'aide du code PHP?

Merci à l'avance

+0

Et vous n'avez pas besoin de crier . Rly? – GolezTrol

Répondre

0

Réponse courte: Non

La base de données contient toutes les données. Le code PHP demande un morceau de données spécifique et doit ensuite le formater en un format lisible par l'homme. Vous pouvez réduire la quantité de PHP au minimum, mais vous en aurez besoin.

+0

Merci beaucoup pour votre réponse, qu'en est-il de T-SQL, est-ce que T-SQL peut résoudre le problème? puis-je exécuter les deux requêtes en utilisant une jointure? – Sarfaraj

+0

Oh, oui, vous pouvez rejoindre les requêtes, mais vous aurez toujours besoin de PHP pour afficher les résultats, même si vous pouvez faire sans la boucle. Peut-être que j'ai mal compris la question? – GolezTrol

0

si vous n'avez pas php installé, vous pouvez conduit la requête mysql, directement à partir d'une invite

echo "SELECT * FROM Customers" | mysql database_name -uusername -ppassword 

[Mise à jour 2011-08-11 11:30]

Pour combiner 2 querys ci-dessus dans un script bash:

echo "SELECT customer_id FROM Customers" | mysql database_name -uusername -ppassword | xargs -I "{}" echo "SELECT * FROM Orders WHERE customer_id = {} ORDER BY DESC LIMIT 0,1" | mysql database_name -uusername -ppassword 

ou une version plus lisible, les tuyaux remplacés rowbreaks whit

echo "SELECT customer_id FROM Customers" 
mysql database_name -uusername -ppassword 
xargs -I "{}" echo "SELECT * FROM Orders WHERE customer_id = {} ORDER BY DESC LIMIT 0,1" 
mysql database_name -uusername -ppassword 
+0

Je pense que vous n'avez pas lu ma question – Sarfaraj

+0

J'ai lu la question "Y at-il un moyen que je peux simplement afficher les résultats de la requête, sans l'aide du code PHP?" –

+0

Merci beaucoup, avez-vous un exemple de requête pour résoudre mon problème – Sarfaraj

0

Si vous voulez sortir le plus récent pour que chaque client dans une seule requête, vous pouvez utiliser:

SELECT Orders.* 
FROM Orders 
LEFT JOIN Orders AS newer_orders ON (newer_orders.customer_id = Orders.customer_id AND newer_orders.date > Orders.date) 
WHERE newer_orders.customer_id IS NULL 
ORDER BY Orders.customer_id 

vous devrez peut-être remplacer « .date » petit morceau de la colonne que vous voulez utiliser pour trier le plus récent sur, à votre requête vous avez manqué que "ORDER BY DESC"

La requête rejoint la table avec une copie de lui-même sur les lignes avec des commandes plus récentes du même customer_id, puis dans l'où je filtre les lignes qui n'a pas newer_order, donc il ne montre que les plus récents

+0

u r un génie, merci beaucoup – Sarfaraj

+0

que diriez-vous si je veux ajouter les détails des clients avec la même requête? – Sarfaraj

+0

il faut un peu de temps pour exécuter cette requête – Sarfaraj

Questions connexes