我有一个包含文章和股票信息的数据库(两个表格)。在输入文章ID时,我从文章表中选择文章,做一些其他的东西,然后查看库存表,如果文章可用。
这可能很容易SELECT * FROM articles
,但是:我的articles
表格中有一个字段parent_id
。如果设置了,我应该选择父行。让我来说明一下:
+----+-----------+---------+---------+
| id | parent_id | article | country |
|----|-----------|---------|---------+
| 1 | | abc | uk |
| 2 | | cde | us |
| 3 | | efg | can |
| 4 | 6 | hij | mex |
| 5 | | klm | bra |
| 6 | | nop | us |
| 7 | 8 | qrs | mex |
| 8 | | tuv | uk |
+----+-----------+---------+---------+
如果我搜索文章abc
,它应该返回国家/地区的第1行。如果我正在搜索hij
,则查询应返回第6行,其中包含国家/地区而非第4行,国家/地区为mex。有没有办法在MySQL中这样做,还是更快/更好/用PHP分解两个查询的唯一方法?
答案 0 :(得分:1)
您可以使用mysql IF Conditionals Mysql docs
来完成然而,你可以迅速得到一个难以调试的恶意sql语句。你可能使用多个查询和php来更快/更容易解决。
还有另一种选择,你可以编写一个视图或存储过程来为你实现它,但又有可能带来好处。
答案 1 :(得分:1)
您可以使用LEFT
外部联接:
SELECT
COALESCE(p.id, a.id) AS id
, COALESCE(p.country, a.country) AS country
FROM
articles AS a
LEFT JOIN
articles AS p
ON p.id = a.parent_id
WHERE
a.article LIKE '%hij%' ; -- or: a.article = 'hij'
答案 2 :(得分:0)
你可以使用MySQL if function我认为IFNULL是你追求的功能。
IFNULL(parent_id, id)
答案 3 :(得分:0)
您可以使用LEFT JOIN 选择a2.id,a2.country 来自文章a1 LEFT JOIN文章a2 ON(a2.id = a1.parent_id) WHERE a1.article ='hij';