2013-12-23 6 views
1

У меня проблема, моя страница PHP создает циклы.Loops on SQL Select

я выбираю в моей БД только 2 информация, как это:

$sqlins="SELECT hardware.name, rd.cmd 
FROM hardware, rd 
WHERE hardware.name LIKE 'Boomee' 
AND rd.cmd LIKE 'putty'"; 
$toto = mysql_query($sqlins); 

Это Exemple моего запроса. И когда я использую петлю Хотя, как это:

while ($data=mysql_fetch_array($toto)) { 
    echo $data[1]; 
    echo "<br>"; 
} 

Я не понимаю, почему мой выход отправить мне много раз ту же линию. В то время как на моей БД у меня 30 записей. Я хочу показать их все ... но код поместил мне 2700!

Мой реальный сценарий немного больше, чем усложняют это, я использую preg_replace, implode и т.д., и многое другое «AND LIKE» в моем SQL Query.

Надеюсь, вы можете мне помочь. И, пожалуйста, помогите мне.

+1

Ваш SQL-запрос, вероятно, возвращает перекрестное объединение (декартово произведение) из двух таблиц. Вам нужно присоединиться к ним на поле mutaul. –

+0

Спасибо вам, и @Joe Taras получил лучший ответ, я отредактировал мой запрос, и теперь он работает. – user3114471

ответ

3

Этот запрос:

SELECT hardware.name, rd.cmd 
FROM hardware, rd 
WHERE hardware.name LIKE 'Boomee' 
AND rd.cmd LIKE 'putty' 

выполнить декартово произведение.

Если вы не хотите выполнять это действие, вы должны установить связь с вашими 2-мя аппаратными средствами и rd.

Я не знаю, является ли аппаратное обеспечение родителем rd или наоборот. Но если существует поле для связывания двух таблиц, вы добавляете это условие в предложение WHERE.

В качестве альтернативы (советовал) переписать запрос с явным ПРИСОЕДИНЯМСЯ следующим образом:

SELECT hardware.name, rd.cmd 
FROM hardware 
INNER JOIN rd 
ON hardware.field = rd.field 
WHERE hardware.name LIKE 'Boomee' 
AND rd.cmd LIKE 'putty' 
+0

Спасибо, что отлично работает. – user3114471

1

Да я-поля связаны в аппаратных средств и й.

Первый - «hardware.id», а второй - «rd.hardware_id».

И ваш метод работает отлично.

Я изменил свой запрос следующим образом, потому что мне нужно узнать, что такое INNER JOIN и ON, прежде чем использовать его.

SELECT hardware.name, rd.cmd 
FROM hardware, rd 
WHERE hardware.id=rd.hardware_id 
AND hardware.name LIKE 'Boomee' 
AND rd.cmd LIKE 'putty' 

Так что спасибо вам большое. Точно так же он поможет мне в поисках связи между столом.