Может ли кто-нибудь помочь мне с этим запросом? - PullRequest
0 голосов
/ 25 марта 2011

У меня есть идентификаторы, хранящиеся в строке моей базы данных, и идентификаторы разделены запятыми, например:

12,3,5,2,7

и я пытаюсь создать запрос, развернув строку и выбрав каждый из идентификаторов из другой таблицы, но я пытаюсь избежать зацикливания запроса из-за проблем с производительностью. есть ли вообще петля? В настоящее время я использую подготовленные MySQL заявления.

$stmt = $DBH->prepare("SELECT ids FROM list WHERE user = ?");
    $stmt->bind_param("s",$userid);
    $stmt->execute();
    $stmt->bind_result($ids);
        $stmt->fetch();

хранится в идентификаторах - это просто список чисел, теперь как я могу запросить в другой таблице поиск строк, соответствующих каждому из чисел в списке, аналогично системе тегов. Числа или количество чисел не определены заранее или неизвестны до выполнения запроса.

EXAMPLE:

Table 1: Where the actual Information is stored

ID    Information

1     /*information stored for id number 1*/
2     /*information stored for id number 2*/
3     /*information stored for id number 3*/
4     /*information stored for id number 4*/
5     /*information stored for id number 5*/



Table 2: The users name and a list of id's stored (The ID_LIST will be constantly changing and expanding, the numbers contained will not be predefined.)

USER      ID_LIST

exampleuser    1,3,5
exampleuser2   1,4,12,22

Первым запросом будет получение списка идентификаторов из таблицы 2 и их разделение. Затем мне нужно получить информацию от каждого идентификатора в таблице 1 из идентификаторов в списке идентификаторов в таблице 2. но я пытаюсь избежать петли, надеюсь, это достаточно конкретно, если нет, пожалуйста, дайте мне знать.

Ответы [ 3 ]

1 голос
/ 25 марта 2011

Цитата: - "У меня есть идентификаторы, хранящиеся в строке моей базы данных, и идентификаторы разделены запятыми, например:"

Это в основном плохой дизайн!

Вы должнысохраните идентификаторы в одном столбце в другой таблице, указав ключ того, какой сейчас ключ для вашей таблицы, плюс идентификатор.

1 голос
/ 25 марта 2011

Остальная часть вашего кода будет выглядеть примерно так:

// This doesn't need to be a prepared statement
if ($result = $DBH->query("SELECT * FROM ids_table WHERE id IN ({$ids})")) {
    while ($row = $result->fetch_assoc()) {
        // Do whatever you want
    }
}
0 голосов
/ 25 марта 2011
SELECT * FROM tbl WHERE FIND_IN_SET(id, '12,3,5,2,7')

Таким образом, вы можете указать любое поле, которое содержит список чисел, разделенных запятой, в качестве второго параметра FIND_IN_SET

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...