我还需要从fieldid = 5的xcart_extra_field_values中选择值。环顾四周,我似乎需要做的是使用连接和别名,但是我似乎不知道如何在表本身上连接,而只是使用另一个别名作为值,并试图在同一个表中两次崩溃我的数据库。两次。
这是我当前的查询,它是有效的:
SELECT a.avail,
c.value,
b.productid,
a.productcode,
FROM xcart_products a,
xcart_products_lng_en b,
xcart_extra_field_values c,
WHERE a.productid IN
(SELECT productid
FROM xcart_extra_field_values
WHERE a.productid = productid
AND fieldid = 5
AND (LOWER(value) = 'retail'
OR LOWER(value) = 'stock'
OR LOWER(value) = 'c1 stock'
OR LOWER(value) = 'c2 stock'
OR LOWER(value) = 'g stock') )
AND c.fieldid = 9
AND (a.productid = b.productid)
AND (b.productid = c.productid)这是使数据库崩溃的查询:
SELECT a.avail,
c.value,
d.value,
b.productid,
a.productcode
FROM xcart_products a,
xcart_products_lng_en b,
xcart_extra_field_values c,
xcart_extra_field_values d
WHERE a.productid IN
(SELECT productid
FROM xcart_extra_field_values
WHERE a.productid = productid
AND fieldid = 5
AND (LOWER(value) = 'retail'
OR LOWER(value) = 'stock'
OR LOWER(value) = 'c1 stock'
OR LOWER(value) = 'c2 stock'
OR LOWER(value) = 'g stock') )
AND c.fieldid = 9
AND d.fieldid = 5
AND (a.productid = b.productid)
AND (b.productid = c.productid)发布于 2014-10-01 05:38:40
我是这样写的:
SELECT xp.avail,
xpe5.value,
xpe9.value,
xpl.productid,
xp.productcode
FROM xcart_products xp
JOIN xcart_products_lng_en xpl
ON xpl.productid = xp.productid
JOIN xcart_extra_field_values xpe5
ON xpe5.productid = xp.productid
AND xpe5.fieldid = 5
AND xpe5.value IN ('retail','stock','c1 stock','c2 stock','g stock')
JOIN xcart_extra_field_values xpe9
ON xpe9.productid = xp.productid
AND xpe9.fieldid = 9假设您已经准备好了所有其他索引,那么您的xpe5值检查可能是导致问题的原因。
我永远不会让员工从文本框中向数据库中输入固定的库存位置。您应该有一个下拉列表,其中至少包含一组值(也许可以让员工为新的库存位置添加值)。我可能会将股票位置选项放在一个单独的表中,并在主表中放入一个外键。
发布于 2014-10-01 05:18:01
我已经把它弄好了。典型的我发布mysql问题的时候。
SELECT a.avail,
c.value,
d.value,
b.productid,
a.productcode
FROM xcart_products a,
xcart_products_lng_en b,
xcart_extra_field_values c,
xcart_extra_field_values d
WHERE a.productid IN
(SELECT productid
FROM xcart_extra_field_values
WHERE a.productid = productid
AND fieldid = 5
AND (LOWER(value) = 'retail'
OR LOWER(value) = 'stock'
OR LOWER(value) = 'c1 stock'
OR LOWER(value) = 'c2 stock'
OR LOWER(value) = 'g stock') )
AND c.fieldid = 9
AND d.fieldid = 5
AND (a.productid = b.productid)
AND (b.productid = c.productid)
AND (c.productid = d.productid)我还需要将c.productid与d.productid进行比较。然而,我对我自己的答案并不满意,因为它看起来非常低效。不幸的是,这是由于我自己对mysql的理解有限。
https://stackoverflow.com/questions/26130145
复制相似问题