Можно ли объединить два похожих запроса в один: Код (Text): $resultForValues = mysql_query("SELECT `value` FROM `values` WHERE `wordId` = {$wordId} AND `status` = 1 ORDER BY `id`"); и Код (Text): $resultForExamples = mysql_query("SELECT `example` FROM `examples` WHERE `wordId`={$wordId} AND `status` = 1 ORDER BY `id`"); А потом в цикле проверять, Код (Text): if(isset($rows['value'])) //actions for values... else //actions for examples
что конкретно ты потом хочешь делать с полученными данными? а то из твоего ифа не понятно, зачем их объединять.
Первый запрос берет все значения слова по его id (wordId), второй запрос берет все примеры по id слова. А потом так: Код (Text): $resultForValues = mysql_query("SELECT `value` FROM `values` WHERE `wordId` = {$wordId} AND `status` = 1 ORDER BY `id`"); $resultForExamples = mysql_query("SELECT `example` FROM `examples` WHERE `wordId`={$wordId} AND `status` = 1 ORDER BY `id`"); while($rows = mysql_fetch_assoc($resultForValues)) $values .= "<li>{$rows['value']}</li>"; while($rows = mysql_fetch_assoc($resultForExamples)) $examples .= "<li>{$rows['example']}</li>"; return array($values, $examples); Я бы хотел сделать один запрос, а потом в цикле обработать и "расфасовать" точно также.
т.е. эта мистическая колонка `id` в обеих таблицах, это не id строк в этих таблицах, а id некоего слова?
ORDER BY в обоих запросах с каким смыслом? Добавлено спустя 40 секунд: а, вкурил. несколько валюесов, несколько экзамплесов к каждому слову =) да
А смысл какой? Сгруппируйте оба этих массива так чтобы ключами шло wordid. И перебирайте себе спокойно в цикле.
Объединение таблиц. Допускаем, что у некоторых value нет соответствующих example, поэтому left join. Если такие случаи невозможны/не нужны, замени на inner join: Код (PHP): $result = mysql_query( "SELECT v.`wordId`, v.`value`, e.`example` FROM `values` AS v LEFT JOIN `examples` AS e ON v.`worlId = e.`wordId AND e.`status` = 1 WHERE v.`wordId` = {$wordId} AND v.`status` = 1 ORDER BY v.`id`, e.`id`"); Получишь объединенный набор где один value может повторяться с разными example. Потом в цикле отлавливай факт смены value Код (PHP): $old = ''; while($row = mysql_fetch_assoc($result)) { if ($row['value'] != $old) { // ... здесь типа вывода шапки для группы value $old = $row['value']; } // здесь типа вывод example }
объединение ради объединения? Зачем забивать запрос дублированными данными, если заведомо известно, что эти таблицы между собой связаны только по номеру слова, и по факту, перебрать три массива в данном случае будет и читабельнее и проще?
Ты прав, я тоже так поступил, давно тоже страдал вложениями думал - это круто =)))) А потом понял, что - это не надо =))) Сделал себе массив и парсинг и не замарачиваюсь ) Все через шаблон делаю и все, там где необходимо, чтобы был запрос =))) Кучу сразу тоже не нужно, и по переходам страниц желательно, тоже все предыдущие скрывать, с другой страницы =))) А то замечал и такие скрипты где все запросы на главной только данные выдираются на разных страницах и разделах, ахаха. А потом в удивлениях, чтож так память то кушает блин! Когда по 40 - 50 запросов на главной и "+" еще после них открытий других раделов =)))
Полста запросов это сила. Но не в них беда. Можно достичь значительных ускорений для человека-посетителя засчет засовывания цссхи в тело каждой страницы, а js-скриптов после закрытия тега боди.