PHP mysqli SELECT * из my_table WHERE id = array_of_ids - PullRequest
0 голосов
/ 13 ноября 2018

Я пользуюсь этим сайтом уже много лет, и это первый раз, когда я задаю вопрос здесь, так что я немного напуган: D

Вот в чем моя проблема, у меня две таблицы,В table_a я получил три столбца, а в table_b я получил 5. Итак, настройка сейчас выглядит примерно так:

       table_a

| r_id | foo   | bar |
+------+-------+-----+
| 1    | dude  | 5   |
+------+-------+-----+
| 2    | homie | 6   |
+------+-------+-----+
| 3    | bro   | 7   |
+------+-------+-----+

       table_b

| id | ada   | rea | lm   | cor  |
+----+-------+-----+------+------+
| 5  | ching | ink | jk   | 32.4 |
+----+-------+-----+------+------+
| 1  | momo  | pal | lmao | 95.5 |
+----+-------+-----+------+------+
| 6  | mama  | pen | lol  | 26.9 |
+----+-------+-----+------+------+
| 4  | chac  | pin | fun  | 91.2 |
+----+-------+-----+------+------+
| 7  | chim  | lap | funk | 82.4 |
+----+-------+-----+------+------+
| 9  | cho   | kil | fin  | 38.1 |
+----+-------+-----+------+------+

Теперь я пытаюсь получить все данные из table_a, а затемполучить lm только из таблицы_b.Я получаю все данные из table_a следующим образом:

SELECT r_id, foo, bar from table_a

Мне нужно использовать идентификаторы, которые я получаю из столбца bar, чтобы получить lm из table_b.Так есть ли способ, которым я могу передать массив, чтобы получить только данные, основанные на идентификаторах в массиве?Если нет, то какой будет самый эффективный способ получить их?

Результат, который я ожидаю, - jk, lol, funk.Буду признателен за любую помощь, спасибо!

Ответы [ 6 ]

0 голосов
/ 13 ноября 2018

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

ids_str = implode("," $ARRAY_OF_IDS);

, а затем используйте этот ids_str в IN os mysql запросах, как показано ниже:

SELECT lm from table_b WHERE id IN( ids_str )
0 голосов
/ 13 ноября 2018

Вы можете использовать INNER JOIN

 SELECT tale_a.r_id, tale_a.foo, tale_a.bar ,table_b.lm 
 FROM tale_a
 INNER JOIN table_b
 ON tale_a.bar=table_b.id

Примечание: Возвращает все столбцы из table_a и только один столбец из table_b

Результирующий вывод:

| r_id | foo   | bar | lm  |
+------+-------+-----+-----+
| 1    | dude  | 5   | jk  |
+------+-------+-----+-----+
| 2    | homie | 6   |lol  |
+------+-------+-----+-----+
| 3    | bro   | 7   |funk |
+------+-------+-----+-----+
0 голосов
/ 13 ноября 2018

Почему бы не присоединиться?

select group_concat(lm) as lm_list
from table_b b
inner join table_a a on b.id = a.bar

Вы можете использовать функцию GROUP_CONCAT (), при этом вы получите jk, lol, funk, в противном случае вы получите 3 строки по одному lm значению

.
0 голосов
/ 13 ноября 2018

Вы должны использовать JOIN , чтобы связать две таблицы в один запрос ...

SELECT  r_id, foo, bar, lm
    FROM table_a 
    JOIN table_b on bar = id
0 голосов
/ 13 ноября 2018

попробуй inner join

SELECT a.r_id, a.foo, a.bar, b.lm  from table_a as a inner join table_b as b on b.id=a.bar
0 голосов
/ 13 ноября 2018

Для этого вы можете попробовать функцию WHERE IN в SQL.

SELECT lm from table_b WHERE id IN(ARRAY_OF_IDS)

Или вы также можете использовать объединение для достижения этого

Select tale_a.*, tale_b.lm from tale_a inner join table_b ON tale_a.bar=tale_b.id
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...