2017-06-29 1 views
-1

Ich habe eine Tabelle mit Spalten mit Namen:Wie wähle ich eine Zeile aus mehreren aus, die in mysql den gleichen Spaltennamen haben?

id 
message 
sender 
chat_id 

ich eine Reihe von Anzahl der Zeilen mit dem gleichen chat_id erhalten möge, während while-Schleife holen.

Was die MySQL Query

+0

Es ist nicht klar, was Sie erreichen wollen. Vielleicht wird ein Beispiel helfen –

+0

Siehe [Warum sollte ich ein MCVE für eine scheinbar sehr einfache SQL-Abfrage bereitstellen] (http://meta.stackoverflow.com/questions/333952/why-should-i-provide- An-mcve-für-was-scheint-mir-sehr-einfach-sql-Abfrage) – Strawberry

Antwort

0

Wenn Sie nur eine Zeile wollen sein, einer dieser Spalten eindeutigen Daten haben muss so können Sie es in der WHERE-Klausel

SELECT id,message,sender,chat_id from information WHERE id=2 zum Beispiel hinzufügen.

SELECT id,message,sender,chat_id from information WHERE chat_id=5 AND sender='mark'

oder während der while-Schleife, passen Sie die Spalte und greifen, was Sie von ihm wollen. Aber wieder muss es eine einzigartige Kombination von Daten sein, sonst wird es von den vorherigen überschrieben werden.

while($row = $result->fetch_assoc()){ 
    if($row['sender'] == 'mark' && $row['chat_id'] == '5'){ 
    $thisIsMyRow = $row['id']; 
} 
0

Bitte könnten Sie mehr erklären? Was willst du erreichen?

sagen, dies ist Ihre Abfrage:

SELECT id,message,sender,chat_id from messages WHERE chat_id=1

Sie 200 Zeilen aufweisen, die die Abfrage entsprechen. Um nur ein Ergebnis zurückzugeben, können Sie ein paar Dinge tun.

Wenn Sie die neuesten Nachricht möchten, können Sie dies tun:

SELECT id,message,sender,chat_id from messages WHERE chat_id=1 ORDER BY id DESC LIMIT 1

ein weiteres Beispiel, neuesten 5 Nachrichten

SELECT id,message,sender,chat_id from messages WHERE chat_id=1 ORDER BY id DESC LIMIT 0,5

Zusätzlich, wenn Sie es nehmen Zurück in PHP, anstatt durch die Schleife zu gehen, können Sie einfach tun:

$row = $result->fetch_assoc()

Da unsere Abfrage nur 1 Zeile zurückgibt, müssen Sie nicht bis zur Schleife. Sie können dies tun, wenn Ihre Abfrage mehrere Ergebnisse zurückgibt - aber es wäre besser, Ihre Abfrage zu optimieren.

Ich kann besser beraten, wenn Sie in der Lage sind, zu erarbeiten.

0
while($row = $result->fetch_assoc()){ 
$query = "SELECT id, message, sender,chat_id FROM messages WHERE Y = X AND Z = $K LIMIT 1"; 
} 

ersetzen die WHERE Teil mit dem, was Sie wollen Spalte

+0

Beachten Sie, dass LIMIT ohne ORDER BY ziemlich bedeutungslos ist - und das Ausführen einer Abfrage innerhalb einer Schleife auf diese Weise ist schlechte Praxis. – Strawberry

+0

@Strawberry warum? Es wird immer noch die Aufgabe der Begrenzung tun, nicht wahr? –

Verwandte Themen