我有两个表,一个用于工作截止日期,一个用于描述工作.每个作业都可以处于状态,一些状态意味着必须从另一个表中删除作业的截止日期.
我可以通过以下方式轻松SELECT完成符合我标准的工作/截止日期LEFT JOIN:
SELECT * FROM `deadline`
LEFT JOIN `job` ON deadline.job_id = job.job_id
WHERE `status` = 'szamlazva'
OR `status` = 'szamlazhato'
OR `status` = 'fizetve'
OR `status` = 'szallitva'
OR `status` = 'storno'
Run Code Online (Sandbox Code Playgroud)
(不status属于job表格deadline)
但是当我想删除这些行时deadline,MySQL会抛出错误.我的查询是:
DELETE FROM `deadline`
LEFT JOIN `job`
ON deadline.job_id = job.job_id
WHERE `status` = 'szamlazva'
OR `status` = 'szamlazhato'
OR `status` = 'fizetve'
OR `status` = 'szallitva'
OR `status` = 'storno'
Run Code Online (Sandbox Code Playgroud)
MySQL错误没有说明:
您的SQL语法有错误; …
我想优化我的查询,所以我调查一下mysql-slow.log.
我的大多数慢查询包含ORDER BY RAND().我无法找到解决此问题的真正解决方案.Theres是MySQLPerformanceBlog的可能解决方案,但我认为这还不够.在未经优化(或经常更新,用户管理)的表上,它不起作用,或者我需要运行两个或更多查询才能选择我PHP生成的随机行.
这个问题有什么解决方案吗?
一个虚拟的例子:
SELECT accomodation.ac_id,
accomodation.ac_status,
accomodation.ac_name,
accomodation.ac_status,
accomodation.ac_images
FROM accomodation, accomodation_category
WHERE accomodation.ac_status != 'draft'
AND accomodation.ac_category = accomodation_category.acat_id
AND accomodation_category.acat_slug != 'vendeglatohely'
AND ac_images != 'b:0;'
ORDER BY
RAND()
LIMIT 1
Run Code Online (Sandbox Code Playgroud) 我正在尝试微调我的MySQL服务器,所以我检查我的设置,分析慢查询日志,并尽可能简化我的查询.
如果我正确编制索引,有时候就足够了.我读过某个地方(请纠正我,如果这是愚蠢的),多于我需要的索引会产生相同的效果,就像我没有任何索引一样.
有多少索引就足够了?你可以说它取决于数百个因素,但我很好奇我如何清理mysql-slow.log足够的以减少服务器负载.
此外,我看到了一些像这样"有趣"的日志条目:
# Query_time: 0 Lock_time: 0 Rows_sent: 22 Rows_examined: 44
SELECT * FROM `categories` ORDER BY `orderid` ASC;
Run Code Online (Sandbox Code Playgroud)
有问题的表包含22行,索引设置为orderid.为什么这个查询毕竟出现在日志中?为什么检查44行,如果它只包含22行?
我有一个由PHP序列化的大型多维数组.它已存储在MySQL中,并且数据字段不够大......结束已被切断...我需要提取数据...... unserialize不会工作...有没有人知道可以关闭的代码所有的数组...重新计算字符串长度...手工做的数据太多了.
非常感谢.
通常在Web服务器或数据库中运行函数会更好吗?
例:
INSERT INTO example (hash) VALUE (MD5('hello'))
Run Code Online (Sandbox Code Playgroud)
要么
INSERT INTO example (hash) VALUE ('5d41402abc4b2a76b9719d911017c592')
Run Code Online (Sandbox Code Playgroud)
好的,这是一个非常简单的例子,但是当网站发展到多个网站或数据库服务器时,为了实现可扩展性,哪里最好"做好工作"?
我们正在使用PHP开发Flash站点.问题是它存储缓存,但我们必须使用JavaScript或PHP禁用缓存.
如何禁用缓存?
我有一个多表查询,类似于此(简化版)
SELECT columns, count(table2.rev_id) As rev_count, sum(table2.rev_rating) As sum_rev_rating
FROM table1
LEFT JOIN table2
ON table1.dom_id = table2.rev_domain_from
WHERE dom_lastreview != 0 AND rev_status = 1
GROUP BY dom_url
ORDER BY sum_rev_rating/rev_count DESC
Run Code Online (Sandbox Code Playgroud)
问题出在该ORDER BY条款中.这会导致显示MySQL错误,如下所示:
不支持参考'sum_ rev_ rating'(参考组功能)
我正在附加一些包含javascript的HTML.
<td onclick="toggleDay('+data+',this,\'tue\');">T</td>
Run Code Online (Sandbox Code Playgroud)
和
<img src="img/cross.png" onclick="deleteAlarm('+data+');">
Run Code Online (Sandbox Code Playgroud)
这两段代码都包含在我附加的大量HTML中.
如果页面加载时它们已经存在,它们可以正常工作,但是当我附加时它们不能工作.
你建议我做什么?是否需要一些排序请求让DOM在追加后重新解释JavaScript或?
编辑:
还有一些信息,我遇到了这个问题,因为我在数据库中添加了一些AJAX的东西,并且在成功时我将html附加到它需要的位置.有点像SO对评论的做法.
EDIT2:
即使有关于它的所有讨论,感谢答案,让它工作.
我需要一个在MySQL中具有用户名和密码字段的简单表.由于用户名必须是唯一的,因此将它们作为主键是有意义的.
使用CHAR()或VARCHAR()作为主键更好吗?
在成功进行AJAX调用后,我需要更新特定的表行(通过tr id ="unique_key").
HTML片段:
<a name=\"p{$product_id}\" class=\"tr{$product_id}\"></a>
<tr id="p{product_id}" class="item-row">
<td><h3>{product_id}</h3><a rel="facebox" href="ajax_url">{product_name}</a></td>
<td>{image_information}</td>
<td>{image_sortiment}</td>
<td>{product_status}</td>
</tr>
Run Code Online (Sandbox Code Playgroud)
使用Javascript:
// AJAX Call
success: function(msg){
$('#p' + prod_id).remove();
$('.tr' + prod_id).after(msg);
$('#p' + prod_id + ' a[rel*=facebox]').facebox();
}
...
Run Code Online (Sandbox Code Playgroud)
怎么了:
<tr>),所以我的'钩子'消失了我的想法有什么问题?我如何强制jQuery'覆盖'所需的表行?
mysql ×6
javascript ×3
performance ×3
php ×3
dom ×2
html ×2
delete-row ×1
indexing ×1
jquery ×1
left-join ×1
logging ×1
random ×1
sql-delete ×1