2011-01-06 7 views
2

Normalerweise muß ich diese Art und Weise verbinden 2 Tabellen zu erhaltenWie meine MySQL-Tabelle

<?php 
$select = "SELECT * FROM question ORDER BY id DESC LIMIT 0,20"; 
$query = $db->query($select); 

while ($fetch = $db->fetch($query)) { 
    $uselect = "SELECT * FROM user WHERE id='".intval($fetch['q_user'])."' "; 
    $uquery = $db->query($uselect); 
    $ufetch = $db->fetch($uquery); 
    ?>  

    Title : <?php echo $fetch['q_title']; ?> 
    User : <?php echo $ufetch['u_id']; ?> 

    <?php 
} 
?> 

Es hat eine einfache Möglichkeit, diese zu verbinden?

Antwort

1

Nun, könnten Sie tun:

SELECT * 
FROM question 
JOIN user ON question.q_user = user.id 
ORDER BY question.id DESC 
LIMIT 0, 20 

Eine Sache, ich würde vorschlagen, explizit die Spalten Auflistung, da jede Überlappung (Question.id und user.id) wird mehrdeutig. Einfach tun SELECT question.id, user.id AS uid, ...

0
select * from question left join user on user.id = question.q_user order by question.id desc limit 0,20; 
0
SELECT * FROM question 
LEFT JOIN user ON user.id = question.q_user 
ORDER BY question.id DESC LIMIT 0,20 
0

Diese Abfrage richtig sein sollte:

create table questions 
(
    question_id bigint unsigned auto_increment primary key, 
    user_id bigint unsigned not null, 
    title varchar(255), 
)engine=innodb; 

create table users 
(
    user_id bigint unsigned auto_increment primary key, 
    name varchar(255) not null 
)engine=innodb; 

// your query 
select q.* from questions q 
inner join users u where u.user_id = q.user_id 
order by q.question_id desc 
0

Ja, ich nehme an, dass Sie den Benutzer zurückkehren wollen, sind die eine Frage gestellt, weil Sie Speichern Sie den q_user, dann müssen Sie einige SQL wie tun:

"SELECT q.q_title, u.u_id FROM Frage q JOIN Benutzer ON (q.q_user = u.u_id)"

Sie können Ihre Grenzwerte usw. auf diese Abfrage anwenden.